Node.js / Javascript Эквивалент Java-класса Deflater - PullRequest
5 голосов
/ 13 февраля 2011

У меня есть бэкэнд Java, который использует Inflater. Я хочу передать данные через 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 голос
/ 15 марта 2011

Вы можете просто поиграть с 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.я думаю, что это может быть хорошим началом для рассмотрения.

0 голосов
/ 22 декабря 2011

наконец-то понял.Для этого вы можете использовать библиотеку zlib в Node.js.Например:

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

или

zip.deflate(buf,callback);
0 голосов
/ 13 февраля 2011

Вместо этого вы можете использовать GZIPInput / OutputStream, который основан на дефляторе / инфляторе AFAIK, а инфлятор / дефлятор зависит от Java.

...