Node.js – ZLIB Gunzip返回空文件

发布时间:2020-09-30 发布网站:编程之家
编程之家收集整理的这篇文章主要介绍了Node.js – ZLIB Gunzip返回空文件编程之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我只是测试Node.js的ZLIB,但很快就遇到了奇怪的结果.这是我的脚本(灵感来自Node.js手册示例 http://nodejs.org/api/zlib.html#zlib_examples):

var zlib = require('zlib'),fs = require('fs'),inp1 = fs.createReadStream('file.txt'),out1 = fs.createWriteStream('file.txt.gz'),inp2 = fs.createReadStream('file.txt.gz'),out2 = fs.createWriteStream('output.txt') ;

inp1.pipe(zlib.createGzip()).pipe(out1);   /* Compress to a .gz file*/
inp2.pipe(zlib.createGunzip()).pipe(out2); /* Uncompress the .gz file */

在这个例子中,在执行脚本之前,我创建了一个名为file.txt的文件,并用示例文本(比如Lorem Ipsum)填充它.

上一个脚本成功创建了.gz文件,我可以从finder解压缩(我在Mac OSX上),但未压缩的output.txt文件为空.

为什么?你有什么主意吗?

解决方法

节点流是异步的,因此两个流都将同时运行.这意味着当你最初打开inp2时file.txt.gz为空,因为其他写入流还没有添加任何东西.

var zlib = require('zlib'),fs = require('fs');

var src = 'file.txt',zip = 'file.txt.gz',dst = 'output.txt';

var inp1 = fs.createReadStream(src);
var out1 = fs.createWriteStream(zip);

inp1.pipe(zlib.createGzip()).pipe(out1);

out1.on('close',function(){
  var inp2 = fs.createReadStream(zip);
  var out2 = fs.createWriteStream(dst);
  inp2.pipe(zlib.createGunzip()).pipe(out2);
})

总结

以上是编程之家为你收集整理的Node.js – ZLIB Gunzip返回空文件全部内容,希望文章能够帮你解决Node.js – ZLIB Gunzip返回空文件所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您喜欢交流学习经验,点击链接加入编程之家官方QQ群:1065694478
编程之家官方公众号

微信公众号搜索 “ 程序精选 ” ,选择关注!

微信公众号搜索 “ 程序精选 ”
精选程序员所需精品干货内容!