2013-06-27 6 views
7

자바 애플리케이션에서 nodejs를 통해 압축 된 데이터를 웹 페이지로 보냅니다. 데이터는 java deflater 및 base64 인코딩으로 압축됩니다. 웹 페이지에서 데이터를 https://github.com/dankogai/js-deflate (으)로 팽창하려하지만 작동하지 않습니다 (빈 결과). 내가 놓친 게 있니?Java에서 압축 - 자바 스크립트로 인한 팽창

자바 측 :

private String compress(String s) { 
    DeflaterOutputStream def = null; 
    String compressed = null; 
    try { 
     ByteArrayOutputStream out = new ByteArrayOutputStream(); 
     // create deflater without header 
     def = new DeflaterOutputStream(out, new Deflater(Deflater.DEFAULT_COMPRESSION, true)); 
     def.write(s.getBytes()); 
     def.close(); 
     compressed = Base64.encodeBase64String(out.toByteArray()); 
     System.out.println(compressed); 
    } catch(Exception e) { 
     Log.c(TAG, "could not compress data: " + e); 
    } 
    return compressed; 
} 

자바 스크립트 측 :

var data = RawDeflate.inflate(Base64.fromBase64(compressed)); 

답변

1

이 시도 :

public static String compressAndEncodeString(String str) { 
    DeflaterOutputStream def = null; 
    String compressed = null; 
    try { 
     ByteArrayOutputStream out = new ByteArrayOutputStream(); 
     // create deflater without header 
     def = new DeflaterOutputStream(out, new Deflater(Deflater.BEST_COMPRESSION, true)); 
     def.write(str.getBytes()); 
     def.close(); 
     compressed = Base64.encodeToString(out.toByteArray(), Base64.DEFAULT); 
    } catch(Exception e) { 
     Log.e(TAG, "could not compress data: " + e); 
    } 
    return compressed; 
} 
+0

JSInflate와 잘 어울립니다. – ndsc

0

나는 동일한 문제로 달렸다. js-deflate 프로젝트 인플레이 터가 고장났습니다. 짧은 입력에서는 작동하지만 긴 입력에서는 실패합니다 (예 : 테스트 데이터로 lorem ipsum).

더 나은 옵션은 zlib.js으로 밝혀졌습니다. I는 자바 스크립트 생성 압축 된 JSON 객체를 팽창을 사용하고 방법은 다음

이며,베이스 64는 서버에 인코딩 :

var base64toBinary = function (base64) { 
    var binary_string = window.atob(base64); 
    var len = binary_string.length; 
    var bytes = new Uint8Array(len); 
    for (var i = 0; i < len; i++)  { 
     var ascii = binary_string.charCodeAt(i); 
     bytes[i] = ascii; 
    } 
    return bytes.buffer; 
} 

var utf8ToString = function (uintArray) { 
    var encodedString = String.fromCharCode.apply(null, uintArray), 
     decodedString = decodeURIComponent(escape(encodedString)); 
    return decodedString; 
} 

var object = JSON.parse(utf8ToString(
    new Zlib.RawInflate(base64toBinary(base64StringFromServer)).decompress())); 

(FYI 헬퍼 기능은 다른 유래에서 유래 답변).