Node.js/Javascript中与Java的Deflater类相当的是什么?

5
我有一个使用Inflater的Java后端,希望通过Node.js向其提供数据。
是否有Deflater类的等效替代品?
编辑:我应该稍微澄清一下。我已经尝试使用https://github.com/dankogai/js-deflate,然后对结果进行base64编码,并将其传递给一个非常简单的Java程序,该程序对其进行base64解码并尝试进行解压缩(创建后端的简单仿真),但我一直收到异常:
java.util.zip.DataFormatException: unknown compression method
    at java.util.zip.Inflater.inflateBytes(Native Method)
    at java.util.zip.Inflater.inflate(Unknown Source)
    at java.util.zip.Inflater.inflate(Unknown Source)

我知道Base64编码过程在两端都正常工作。

我还应该注意到,我无法更改Java后端。

3个回答

1

你可以随意尝试使用https://github.com/waveto/node-compress进行操作。

var compress=require("./compress");
var sys=require("sys");
var posix=require("posix");

// Create gzip stream
var gzip=new compress.Gzip;
gzip.init();

// Pump data to be compressed
var gzdata1 = gzip.deflate("My data that needs ", "binary"); 
sys.puts("Compressed size : "+gzdata1.length);

var gzdata2 = gzip.deflate("to be compressed. 01234567890.", "binary"); 
sys.puts("Compressed size : "+gzdata2.length);

var gzdata3=gzip.end();
sys.puts("Last bit : "+gzdata3.length);

// Take the output stream, and chop it up into two
var gzdata = gzdata1+gzdata2+gzdata3;
sys.puts("Total compressed size : "+gzdata.length);
var d1 = gzdata.substr(0, 25);
var d2 = gzdata.substr(25);

// Create gunzip stream to decode these
var gunzip = new compress.Gunzip;
gunzip.init();
var data1 = gunzip.inflate(d1, "binary");
var data2 = gunzip.inflate(d2, "binary");
var data3 = gunzip.end();

sys.puts(data1+data2+data3);

这个工作得很好,但是在使用node_pcap时遇到了一些问题。我认为这可能是一个好的起点。


我尝试使用它,但在Java端使用Deflater无法解压缩。不幸的是,Gzip和Deflate是不同的。还是谢谢你的尝试! - Alec Gorge

1
终于搞定了。你可以在Node.js中使用zlib库来完成这个任务。例如:
var zip = require('zlib');
zip.createDeflate({
    level: zip.Z_DEFAULT_COMPRESSION,
    windowBits: zip.MAX_WBITS
});

或者

zip.deflate(buf,callback);

0

您可以使用基于Deflator/Inflator的GZIPInput/OutputStream,据我所知,Inflator/Deflator是Java特定的。


我应该提到我不能改变后端,所以这不现实。 - Alec Gorge
除非Java期望数据以base64形式发送,否则您将无法使用base64。 - Peter Lawrey
不是这样的。抱歉,我表达不清楚。我的意思是,我有一个小应用程序来测试这个具体的问题,我正在对在Node和这个小应用程序之间传输的数据进行base64编码。 - Alec Gorge

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