2016-08-05 114 views
0

我試圖使用需要發送消息進行壓縮的Web服務。目前的實現是在Java中完成的,但是,我想將它移植到Javascript中。壓縮的工作原理如下:使用各種充氣/放氣像Zlib/Pako庫沒有任何成功Javascript Deflater等效於Javascript

String params = "hello"; 

byte[] bytes = params.getBytes(); 

ByteArrayOutputStream bao = new ByteArrayOutputStream(bytes.length);  
byte[] buffer = new byte[1024]; 
byte[] out = null; 
int len; 

Deflater compress = new Deflater(); 
compress.setInput(bytes); 
compress.finish(); 
while(!compress.finished()) { 
    len = compress.deflate(buffer); 
    bao.write(buffer, 0, len); 
} 
out = bao.toByteArray(); 

//Output: [120, -100, -53, 72, -51, -55, -55, 7, 0, 6, 44, 2, 21] 

我已經試過:

function stringToUint(string) { 
    var charList = string.split(''), 
    uintArray = []; 
    for (var i = 0; i < charList.length; i++) { 
     uintArray.push(charList[i].charCodeAt(0)); 
    } 
    return new Uint8Array(uintArray); 
} 

var bytes = stringToUint('hello'); 
var compressed = pako.deflate(bytes); 

//Output: [120, 156, 203, 72, 205, 201, 201, 7, 0, 6, 44, 2, 21] 

比較輸出:

Java Output: [120, -100, -53, 72, -51, -55, -55, 7, 0, 6, 44, 2, 21] 
JS Output: [120, 156, 203, 72, 205, 201, 201, 7, 0, 6, 44, 2, 21] 
+0

我猜'Uint8Array'中的'U'表示無符號,所以爲什麼不嘗試簽名版本https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/int8Array –

+0

就字節數據而言,這兩個結果是相同的 - 在處理這樣的壓縮數據時,使用帶符號的字節實際上並不常見,所以,我看待它的方式是,您的Java輸出是錯誤的*(除了它是在字節級別相同,所以沒有問題) –

+0

@ScaryWombat好像壓縮返回一個無符號的字節數組。當我用Int8Array(壓縮)創建一個帶符號的int數組時,輸出似乎現在匹配了。乾杯! – mildse7en

回答

0

感謝大家幫忙,看起來字節數據是一樣的,我只是需要將它轉換爲有符號數組。