createWriteStream vs writeFile?



这两种操作的基本区别是什么?

someReadStream.pipe(fs.createWriteStream('foo.png'));

someReadStream.on('data', function(chunk) { blob += chunk } );
someReadStream.on('end', function() { fs.writeFile('foo.png', blob) });

当使用请求库进行抓取时,我可以保存图片(png, bmp)等。只有前一种方法和后一种方法有相同的乱码(二进制)数据,但图像不渲染。

当你在node.js中使用流时,你应该选择管道。

根据Node.js的流事件文档,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));
});

您可以通过检查输出文件的大小来注意到什么时候出了问题。

相关内容

  • 没有找到相关文章

最新更新