Ada*_*ams 5 zlib stream node.js
我试图通过逐渐将字符串(由换行符分隔的JSON)传输到它来创建.gz文件.
使用节点0.11和0.12(两者都具有相同的reasult,.gz文件将无法打开).
我将代码缩减为:
var fs = require('fs');
var output = fs.createWriteStream('test.gz');
var zlib = require('zlib');
var compress = zlib.createGzip();
var myStream = compress.pipe(output);
myStream.write('Hello, World!');
myStream.end();
Run Code Online (Sandbox Code Playgroud)
该文件已创建,但我无法打开它.我究竟做错了什么?
好的,所以这是修复:
var fs = require('fs');
var output = fs.createWriteStream('test.gz');
var zlib = require('zlib');
var compress = zlib.createGzip();
/* The following line will pipe everything written into compress to the file stream */
compress.pipe(output);
/* Since we're piped through the file stream, the following line will do:
'Hello World!'->gzip compression->file which is the desired effect */
compress.write('Hello, World!');
compress.end();
Run Code Online (Sandbox Code Playgroud)
和解释:管道用于将流从一个上下文转发到另一个上下文,每个上下文根据它自己的规范操作流(即STDOUT-> gzip压缩 - >加密 - >文件将导致打印到STDOUT的所有内容都通过gzip压缩,加密并最终写入文件).
在您的原始示例中,您正在写入管道的末尾,这意味着在没有操作的情况下写入文件,因此您获得了要求写入的纯ASCII.这里的混乱是关于myStream是什么.你假设它是整个链(gzip->文件),但事实上,它只是结束(文件).
将管道设置为流对象后,当您写入原始流时,对该流的所有进一步写入将自动进行管道传输.
我发现一些有用的参考资料:http:
//codewinds.com/blog/2013-08-20-nodejs-transform-streams.html#what_are_transform_streams_
http://www.sitepoint.com/basics-node-js-streams/
https://nodejs.org/api/process.html
| 归档时间: |
|
| 查看次数: |
3364 次 |
| 最近记录: |