Node.js / Javascript相当于Java的Deflater类

时间:2011-02-13 18:20:42

标签: java javascript node.js zlib deflate

我有一个使用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 个答案:

答案 0 :(得分: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。我认为这可能是一个良好的开端。

答案 1 :(得分:0)

您可以使用基于Deflator / Inflator AFAIK的GZIPInput / OutputStream,Inflator / Deflator是特定于Java的。

答案 2 :(得分:0)

终于搞清楚了。您可以使用Node.js中的zlib库来执行此操作。例如:

var zip = require('zlib');
zip.createDeflate({
    level: zip.Z_DEFAULT_COMPRESSION,
    windowBits: zip.MAX_WBITS
});

zip.deflate(buf,callback);