2016-09-05 6 views
1

私はZlibライブラリを使ってファイルを解凍しようとしていますが、最終的に最初の8バイトだけ解凍されているようです。ここnodejsで圧縮されたファイルを膨張させる

コード:

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バイト??):GZIPので混乱することができる

Buffer f0 a0 f6 ff 26 4c 00 00 
+0

非同期で開こうとしましたか? – Jaime

+0

いいえ、私はやっていません、私はnodejsで新しい方法を知っていません:/ – han0idx

答えて

0

デフレート対それがどちらかを再確認してください。

ファイルをgunzipまたはunzipしようとしている場合は、ファイル名を指定して1ステップで実行するモジュールを使用する方が簡単かもしれません。それは.gzをファイルがある場合は、何かがこのシンプルで働くことがあります。

require('gunzip-file')('example.json.gz', 'example.json'); 

あなたが実際に制御し、その収縮さではなく、gzipで圧縮を必要とし、現在のノードのバージョンに組み込まれているのzlibを使用したい場合は、説明がありますページの上部付近https://nodejs.org/api/zlib.html#zlib_zlib

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); 
+0

ありがとうたくさんの2番目の答えは良い1つ、最後の質問だった、あなたはバイトインデックス72で "file1.ff" ? – han0idx

+0

おそらくinp.read(72)を使用していますか?おそらく、パイプを呼び出す前に。しかし、最初に一時停止/非強制モードにする必要があるかもしれません。 https://nodejs.org/api/stream.html#stream_readable_read_size –

+0

よろしくお願いします。 – han0idx

関連する問題