Java中的Deflate-Javascript中的充气
我正在通过nodejs将压缩数据从java应用程序发送到网页。使用java deflater压缩数据,并对base64进行编码。在网页上,我试图膨胀数据,但它不工作(空结果)。我错过什么了吗 Java方面:Java中的Deflate-Javascript中的充气,java,javascript,inflate,deflate,Java,Javascript,Inflate,Deflate,我正在通过nodejs将压缩数据从java应用程序发送到网页。使用java deflater压缩数据,并对base64进行编码。在网页上,我试图膨胀数据,但它不工作(空结果)。我错过什么了吗 Java方面: private String compress(String s) { DeflaterOutputStream def = null; String compressed = null; try { ByteArrayOutputStream out
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));
试试这个:
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;
}
我遇到了同样的问题。js deflate项目充气器似乎已损坏。我发现它可以在短输入时工作,但在长输入时失败(例如,lorem ipsum作为测试数据) 一个更好的选择是 下面是我如何使用它在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()));
var base64toBinary=函数(base64){
var binary_string=window.atob(base64);
var len=二进制字符串长度;
var字节=新的Uint8Array(len);
对于(变量i=0;i
(仅供参考,helper函数源自其他stackoverflow答案)。与JSInflate结合使用效果良好