这两项操作之间的基本区别是什么?
someReadStream.pipe(fs.createWriteStream('foo.png'));
VS
someReadStream.on('data', function(chunk) { blob += chunk } );
someReadStream.on('end', function() { fs.writeFile('foo.png', blob) });
当使用请求库进行抓取时,我可以保存pics(png,bmp)等..只使用前一种方法,后者有相同的gibbersh(二进制)数据,但图像不会渲染。
他们有什么不同?
答案 0 :(得分:5)
当你在node.js中使用流时,你应该更喜欢管道它们。
根据Node.js’s stream-event docs,data
个事件会发出缓冲区(默认情况下)或字符串(如果设置了encoding
)。
使用文本流时,可以使用data
事件将字符串数据块连接在一起。然后,您将能够将数据作为一个字符串处理。
但是当处理二进制数据时,它并不那么简单,因为你会收到缓冲区。要连接缓冲区,请使用Buffer.concat
等特殊方法。可以对二进制流使用类似的方法:
var buffers = [];
readstrm.on('data', function(chunk) {
buffers.push(chunk);
});
readstrm.on('end', function() {
fs.writeFile('foo.png', Buffer.concat(buffers));
});
通过检查输出文件的大小,您可以注意到出现问题。