2012-11-04 3 views
2

자바로 데이터를 쓰고 자바 스크립트로 다시 읽고 싶습니다. 현재 저는 json을 사용하고 있습니다. 그러나 두 개의 큰 배열 (이 두 가지 방식) 때문에이 접근법은 느립니다 (구문 분석 및 네트워크).자바로 데이터를 효율적으로 직렬화하고 자바 스크립트로 읽기

좋은 대안이 무엇입니까? 나는 massage pack을 발견했다. 그러나 이것은 내가하려고하는 것에 대해 조금 과잉이라고 보인다. 차라리 base64와 같은 간단한 솔루션을 사용 하겠지만 자바 스크립트 읽기 사이트에서 작동하도록 만들 수는 없습니다. 또는 "charset=x-user-defined method"을 사용해야합니까? (더 효율적입니까?)

+2

http://binaryjs.com입니까? JSON은 일반적으로 HTTP 압축과 결합 된 좋은 선택입니다. – Bergi

+0

명시된 바와 같이 : 아주 큰 배열의 float/double 형태의 간단한 json – Karussell

+0

@Bergi http 압축 된 json을 읽으려면 Javascript 측에서 무엇을 활성화해야합니까? – Karussell

답변

0

글쎄, 나는 기존의 솔루션에 만족하지 않았다. (단순한 json을 사용할 때 오버 헤드가 너무 많거나 너무 느리다). 그래서 여기, 기록을 위해, 'arraybuffer'를 통해 HTML5 솔루션은

var xhr = new XMLHttpRequest(); 
    xhr.open('GET', url, true); 
    xhr.responseType = 'arraybuffer'; 
    xhr.onload = function(e) { 
     if (this.status == 200) { 
      var dv = new DataView(this.response); 
      var json = { 
       "info" : { 
        "took" : 0 
       }, 
       "route": { 
        "time": 0, 
        "distance": 0, 
        "data" : {} 
       } 
      }; 

      var i = 0; 
      json.info.took = dv.getFloat32(i);     
      i += 4; 
      json.route.distance = dv.getFloat32(i); 
      i += 4; 
      json.route.time = dv.getInt32(i); 
      i += 4; 
      var locations = dv.getInt32(i); 
      var tmpArray = []; 
      json.route.data = { 
       "type" : "LineString", 
       "coordinates": tmpArray 
      }; 
      for(var index = 0; index < locations; index ++) { 
       i += 4; 
       var lat = dv.getFloat32(i); 
       i += 4; 
       var lng = dv.getFloat32(i); 
       tmpArray.push([lng, lat]); 
      }    
      callback(json); 
     } else 
      errCallback(e); 
    }; 
    xhr.send(); 

은 (서버에 response.setHeader ("액세스 제어 - Allow-을 활성화하기 위해 필요한이 십자가 원본 정책 작업을 만들려면 Origin ","* ")) 및 클라이언트에서 (jQuery.support.cors = true). 여기에 full working example은 간단한 자바 서블릿으로 DataOutputStream을 사용합니다. 대안으로 json fallback이 있습니다.

다른 방법은 모든 숫자를 문자열로 인코딩 한 다음 json에 넣는 것입니다 (base64를 통해).

내가에 stumpled 또 다른 흥미로운 프로젝트를 보내려 할 데이터의 유형

0

protobufs를 시도해 볼 수 있습니다. Javascript에 대한 공식 구현은 없지만 적어도 두 가지 타사 구현이 있습니다. Google Protocol Buffers - JavaScript

Protobufs는 빠른 속도와보다 컴팩트 한 (텍스트가 아닌) 표현으로 유명합니다. JSON 및 XML.

+1

감사합니다. 레이더에도 있었지만 더 쉽거나 더 공식적인 버전을 선호합니다. – Karussell

관련 문제