2013-06-27 66 views
7

我通過nodejs將壓縮數據從java應用程序發送到網頁。數據使用java deflater和base64編碼進行壓縮。在網頁上,我試圖用https://github.com/dankogai/js-deflate誇大數據,但它不起作用(空結果)。我錯過了什麼嗎?在Java中放氣 - 用Javascript膨脹

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; 
} 

JavaScript端:

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

下面是如何我使用它在Javascript中膨脹時產生,壓縮JSON對象和Base64服務器上編碼:

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,輔助功能從其他計算器衍生答案)。