在Java中压缩-在Javascript中解压缩

7
我正在使用Java应用程序通过nodejs向网页发送压缩数据。该数据使用Java压缩器进行压缩并进行了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;
}

JavaScript端:
var data = RawDeflate.inflate(Base64.fromBase64(compressed));
2个回答

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

与JSInflate结合使用效果很好。 - ndsc

0

我遇到了同样的问题。js-deflate 项目的解压器似乎出了问题。我发现它可以在短输入上工作,但在长输入(例如,lorem ipsum 作为测试数据)上失败。

一个更好的选择是 zlib.js

这是我如何在 Javascript 中使用它来解压服务器上生成、压缩和 base64 编码的 JSON 对象:

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()));

(顺便说一下,这些辅助函数是从其他stackoverflow答案中衍生出来的。)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接