Tag: zlib

在压缩部分文件时,如何避免zlib“意外结束文件”?

我试图读取压缩文件的一部分,而解压缩它,所以我可以parsing头的内容,而不读取不必要的字节。 我有这个工作以前使用fs.read()传递选项,只读取前500字节,然后使用zlib.gunzip()来解压从二进制数据的头之前的内容。 这工作正常,直到节点v5.0.0修补一个错误,以确保zlib抛出一个截断的input( https://github.com/nodejs/node/pull/2595 )错误。 现在我从zlib得到以下错误。 Error: unexpected end of file 我怎样才能解压这个部分文件知道我截断input,而不会引发错误。 我认为这可能会更容易与stream,所以我写了以下内容。 var readStream = fs.createReadStream(file.path, {start: 0, end: 500}); var gunzip = zlib.createGunzip(); readStream.pipe(gunzip) .on('data', function(chunk) { console.log(parseBinaryHeader(chunk)); console.log('got %d bytes of data', chunk.length); }) .on('error', function (err) { console.log(err); }) .on('end', function() { console.log('end'); }); 我的parseBinaryHeader()函数返回正确的标题内容,所以我知道它是解压缩,但它仍然在input结束时抛出一个错误。 我可以添加错误侦听器来处理错误,并且无所作为,但这似乎并不理想。 有任何想法吗?

如何捕获node.js中的zlib错误

我正在从可能被压缩的服务器上下载内容,所以我正在使用我在各种地方发现的样板文件: var file = fs.createWriteStream(filename); var request = https.get(url, function(response) { switch (response.headers['content-encoding']) { case 'gzip': response.pipe(zlib.createGunzip()).pipe(file); break; case 'deflate': response.pipe(zlib.createInflate()).pipe(file); break; default: response.pipe(file); break; } file.on('finish', function() { console.log("Done: "+url); file.close(function() {}); }); }).on('error', function(err) { // Handle errors fs.unlink(filename, function() {}); console.log(err+" "+url); }); 麻烦的是,如果HTTPS请求因networking错误而失败,我有时会得到这个exception: Error: unexpected end of file at Zlib._handle.onerror (zlib.js:363:17) […]

使用C#代码片段压缩的nodejs解压缩string

我使用C#工具收集一些大型的日志信息。 因此,我search了一种方法来压缩这个巨大的string,我发现这个片段做的伎俩: public static string CompressString(string text) { byte[] buffer = Encoding.UTF8.GetBytes(text); var memoryStream = new MemoryStream(); using (var gZipStream = new GZipStream(memoryStream, CompressionMode.Compress, true)) { gZipStream.Write(buffer, 0, buffer.Length); } memoryStream.Position = 0; var compressedData = new byte[memoryStream.Length]; memoryStream.Read(compressedData, 0, compressedData.Length); var gZipBuffer = new byte[compressedData.Length + 4]; Buffer.BlockCopy(compressedData, 0, gZipBuffer, 4, compressedData.Length); Buffer.BlockCopy(BitConverter.GetBytes(buffer.Length), 0, […]

为什么zlib.deflate(buf,callback)是asynchronous的?

当接受input缓冲区,并知道压缩是一个CPU绑定的任务,是否需要提供callback? 是否只是像callback(err, result)一样遵循惯例? Doc: http : //nodejs.org/api/zlib.html#zlib_zlib_deflate_buf_callback

在nodejs中解压缩数据

我正在尝试使用下面的代码来解压缩base64解码的缓冲区对象,但callback函数没有得到执行。 有人能告诉我我在这里失踪吗? function (event, context) { event.Records.forEach(function (record) { // Kinesis data is base64 encoded so decode here var payload = new Buffer(record.kinesis.data, 'base64'); zlib.gunzip(payload, function (err, data) { console.log("new data2"); if (!err) { console.log("new data3"); console.log(data); } else { console.log("new data4"); console.log(err, err.stack); } }); }); context.done(); };

我们如何区分deflateRawstream的deflatestream?

一些HTTP服务器发送deflate原始主体(没有zlib头)而不是实际的deflate主体。 请参阅以下讨论: 为什么真实世界的服务器更喜欢gzip而不是deflate编码? 是否有可能检测到它们并在Node.js中正确处理膨胀? 我的意思是除了尝试createInflate他们并捕获错误,然后再次尝试createInflateRaw 。

将两个CRC32值组合成一个在nodejs中

我想将两个预先计算好的crc32合并成一个新的: nodejs中的示例代码: // i'm using crc32 lib: https://github.com/brianloveswords/buffer-crc32/blob/master/index.js var crc32 = require('buffer-crc32'); var foo = new Buffer('foo'); var bar = new Buffer('bar'); var fooCrc32 = crc32(foo); // <Buffer 8c 73 65 21> var barCrc32 = crc32(bar); // <Buffer 76 ff 8c aa> // how to combine crc32 of foo and crc32 of bar to get […]

使用内置模块压缩文件夹

编辑 – >有人可以build议编辑我的答案,例如我不知道如果exec更好或spawn ? 是否有可能使用zlib和其他内置模块压缩目录/文件夹的内容? 我正在寻找一种方法来做到这一点,而无需外部依赖。 另一个select是在mac,windows等上运行本地进程,用于zip,tar等,我确定在任一操作系统上都有命令行实用程序 这不是一个答案,但它与我正在寻找什么有关,它产生了一个本地进程压缩。 我正在看的另一个链接 。 unix命令为zip | exec和产卵 我在terminal上试过的命令, / usr / bin / zip test.zip / resources / html / article du -hs test.zip 码 var zip = function(path) { const spawn = require('child_process').spawn; const exec = require('child_process').exec; exec("which zip", function (error, stdout, stderr) { if (error) { console.log(error); […]

Node.js:使用zlib压缩时定义flush方法

如何在使用Node.js的内置zlib模块压缩缓冲区时定义flush方法? 具体来说,我需要Z_SYNC_FLUSH。 在设置这个标志的选项中似乎没有一个地方。 http://nodejs.org/api/zlib.html

获取在zlibstream中读取的字节数

我正在使用zlib.Inflate来膨胀一大块数据。 我现在的问题是,我所知道的是有多less个未压缩的数据字节,但没有多less压缩的数据stream。 我目前只是写入整个input缓冲区到inflater,然后从它读取未压缩的字节数量。 这给了我正确的输出数据,但我必须知道有多less字节被用来继续parsing剩余的数据。 所以现在我做了以下testing: var inflater = zlib.createInflate(); inflater.write(strm.buffer.slice(strm.position)); inflater.on("readable", (function(inflater, len) { return function() { console.log(inflater); var decompData = inflater.read(len); console.log(inflater); var output = fs.createWriteStream("output.bin"); output.write(decompData); } })(inflater, len)); 我在读取之前和之后检查了充电器的所有成员,但是没有任何变化,除了读缓冲器(具有解压缩的数据)之外的每个值都是相同的。 有没有一种方法可以确定从压缩缓冲区读取了多less个字节? 先谢谢了,Cromon