0
メッセージを圧縮して送信する必要のあるWebサービスを使用しようとしています。現在の実装はJavaで行われていますが、Javascriptに移植する必要があります。私が試したJavascriptに相当するJava Deflater
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]
様々なインフレートは/任意の成功なしZlib/Pakoのようなライブラリを収縮させる使用して::
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