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]
我猜'Uint8Array'中的'U'表示無符號,所以爲什麼不嘗試簽名版本https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/int8Array –
就字節數據而言,這兩個結果是相同的 - 在處理這樣的壓縮數據時,使用帶符號的字節實際上並不常見,所以,我看待它的方式是,您的Java輸出是錯誤的*(除了它是在字節級別相同,所以沒有問題) –
@ScaryWombat好像壓縮返回一個無符號的字節數組。當我用Int8Array(壓縮)創建一個帶符號的int數組時,輸出似乎現在匹配了。乾杯! – mildse7en