Node.js 用nodejs为压缩空气充气

Node.js 用nodejs为压缩空气充气,node.js,compression,buffer,zlib,fs,Node.js,Compression,Buffer,Zlib,Fs,我试图用Zlib库解压一个文件,但最后似乎只解压了前8个字节,我搜索了所有软件,但找不到解决方案,我如何才能得到完整的数据 代码如下: var zlib = require('zlib'); fs = require('fs') fs.open('./file1.ff', 'r', function(status, fd) { if (status) { console.log(status.message); return; } var

我试图用Zlib库解压一个文件,但最后似乎只解压了前8个字节,我搜索了所有软件,但找不到解决方案,我如何才能得到完整的数据

代码如下:

var zlib = require('zlib');
fs = require('fs')
fs.open('./file1.ff', 'r', function(status, fd) {
    if (status) {
        console.log(status.message);
        return;
    }
    var bufferOrig = new Buffer(100);
    fs.read(fd, bufferOrig, 0, bufferOrig.length, 76, function(err, num) {
        console.log(bufferOrig);
        zlib.inflate(bufferOrig, {
            finishFlush: zlib.Z_SYNC_FLUSH
        }, function(err, bufferDef) {
            if (!err) {
                console.log(bufferDef);
                fs.writeFile("./file2.ff", bufferDef, function(err) {
                    if (err) return console.log(err);
                    console.log("The file was saved!");
                });
            } else console.log('inflate error: ' + err);
        });
    });
});
原始缓冲区:

Buffer 78 9c ec dd 07 5c 14 d7 da 07 e0 b3 4b 47 84 a5 59 a3 2e 0b a2 58 81 05 7b a1 da 75 7a 9f 11 a9 76 17 a9 36 58 54 2c a9 6a ec d1 18 8d dd 18 35 f6 96 ...
膨胀的缓冲区(仅8字节):


Deflate和gzip可能会混淆,所以请仔细检查它是哪一个

如果您只是尝试压缩或解压文件,那么在给定文件名的情况下,使用一个一步完成的模块可能会更简单。如果它是一个.gz文件,那么这种简单的方法可能会奏效:

require('gunzip-file')('example.json.gz', 'example.json');
如果您确实需要该控件及其deflated而不是gzip,并且希望使用当前节点版本中内置的zlib,那么说明将在页面顶部附近


Deflate和gzip可能会混淆,所以请仔细检查它是哪一个

如果您只是尝试压缩或解压文件,那么在给定文件名的情况下,使用一个一步完成的模块可能会更简单。如果它是一个.gz文件,那么这种简单的方法可能会奏效:

require('gunzip-file')('example.json.gz', 'example.json');
如果您确实需要该控件及其deflated而不是gzip,并且希望使用当前节点版本中内置的zlib,那么说明将在页面顶部附近


你尝试过异步打开它吗?不,我不知道怎么做,我是nodejs的新手:/你尝试过异步打开它吗?不,我不知道怎么做,我是nodejs的新手:/谢谢。第二个答案很好,最后一个问题,你知道如何开始读取字节索引72处的“file1.ff”吗?可能是inp.read(72)?可能是在打电话之前。但您可能需要先将其置于暂停/非流动模式(然后再将其置于流动模式)?好的,我试试看,干杯;)非常感谢第二个答案很好,最后一个问题,你知道如何开始读取字节索引72处的“file1.ff”吗?可能是inp.read(72)?可能是在打电话之前。但您可能需要先将其置于暂停/非流动模式(然后再将其置于流动模式)?好的,我试试看,干杯;)
const inflate = zlib.createInflate();
const fs = require('fs');
const inp = fs.createReadStream('file1.ff');
const out = fs.createWriteStream('file1_inflated.ff');

inp.pipe(inflate).pipe(out);