有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在Java中放气在Javascript中充气

我正在通过nodejs将压缩数据从java应用程序发送到网页。使用java deflater压缩数据,并对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. # 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;
    }
    
  2. # 2 楼答案

    我遇到了同样的问题。js泄气项目充气机似乎已损坏。我发现它可以在短输入时工作,但在长输入时失败(例如,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()));
    

    (仅供参考,助手函数源自其他stackoverflow答案)