我发现了两种不同的方法来在节点中对流进行管道处理。js
众所周知的流的方法
https://nodejs.org/api/stream.html#stream_readable_pipe_destination_options
和流的独立功能
https://nodejs.org/api/stream.html#stream_stream_pipeline_streams_callback
我应该使用哪一种?这两者之间有什么好处?
pipeline是pipe的改进版本,它从节点开始添加到流模块中。JSV10
此外,管道接受任意数量的参数,最后一个参数是回调,用于知道管道何时结束或抛出错误。
使用管道:
mySourceStream.pipe(myStream).pipe(anotherStream)
使用管道:
mySourceStream.pipeline(myStream, anotherStream, err => {
if (err) {
console.log('There is an error')
} else {
console.log('pipeline successful')
}
})
根据文件,他们都做同样的事情。但也有一些不同之处:
. tube()
是Readable的方法,而管道
是接受流到管道的stream
的模块方法。 管道()
方法在管道完成时提供回调。 管道()
方法是自节点的10个版本以来添加的,而。
在我看来,使用
pipeline()。
示例。管道()
:
const fs = require('fs');
const r = fs.createReadStream('file.txt');
const z = zlib.createGzip();
const w = fs.createWriteStream('file.txt.gz');
r.pipe(z).pipe(w);
管道()
的示例:
const { pipeline } = require('stream');
const fs = require('fs');
const zlib = require('zlib');
pipeline(
fs.createReadStream('archive.tar'),
zlib.createGzip(),
fs.createWriteStream('archive.tar.gz'),
(err) => {
if (err) {
console.error('Pipeline failed.', err);
} else {
console.log('Pipeline succeeded.');
}
}
);
TL; DR-你最好使用管道
什么是管道?
来自文档:一种模块方法,用于在流之间传递错误并正确清理,并在管道完成时提供回调。
使用管道的动机是什么?
❌ 让我们看看下面的代码:
const { createReadStream } = require('fs');
const { createServer } = require('http');
const server = createServer(
(req, res) => {
createReadStream(__filename).pipe(res);
}
);
server.listen(3000);
这里怎么了?如果响应将退出或客户端关闭连接,则读取流不会关闭或销毁,从而导致内存泄漏。
✅因此,如果您使用管道
,它将关闭所有其他流,并确保没有内存泄漏。
const { createReadStream } = require('fs');
const { createServer } = require('http');
const { pipeline } = require('stream');
const server = createServer(
(req, res) => {
pipeline(
createReadStream(__filename),
res,
err => {
if (err)
console.error('Pipeline failed.', err);
else
console.log('Pipeline succeeded.');
}
);
}
);
server.listen(3000);
问题内容: 所述流文档状态双工流 “是同时实现可读写接口流”和变换流 “是双相流其中输出以某种方式从输入计算”。不幸的是,文档没有描述Transplex流在Duplex流之外提供的内容。 两者之间有什么区别吗?您什么时候可以使用另一个? 问题答案: 可以将双工流视为具有可写流的可读流。两者都是独立的,每个都有独立的内部缓冲区。读写事件独立发生。 转换流是双工的,其中读写以因果关系进行。双工流的端点
本文向大家介绍HTML5有哪些存储类型?它们之间有什么区别?相关面试题,主要包含被问及HTML5有哪些存储类型?它们之间有什么区别?时的应答技巧和注意事项,需要的朋友参考一下 cookie: 最大 4k, 基本无兼容问题, 所有同源tab 共享, 每次请求都携带, key-value 存储, value 只存字符串 sessionStorage 无大小限制, 只在当前 tab 有效, tab 关闭
问题内容: 在此示例中: 无法编译为: 而被编译器接受。 这个答案说明唯一的区别是,与不同,它允许您稍后引用类型,似乎并非如此。 是什么区别,并在这种情况下,为什么不第一编译? 问题答案: 通过使用以下签名定义方法: 并像这样调用它: 在jls§8.1.2中,我们发现(有趣的部分被我加粗了): 通用类声明定义了一组参数化类型(第4.5节), 每种可能通过类型arguments调用类型参数节的类型
问题内容: 如何在hibernate中使用级联和逆运算?定义它们的过程/标签是什么?它们彼此相关吗?它们如何有用? 问题答案: 在通过中介表进行多对多关系的情况下;“级联”表示是否在子表中创建/更新记录。而“反向”表示是否在中间表中创建/更新记录 例如,假设情况1下的学生可以拥有多部电话。因此,学生班级拥有“手机套”的属性。另外,一部电话可以由多个学生拥有。因此,“电话”类具有“学生组”的属性。s
我试图理解反应流和反应流之间的区别,特别是在RxJava的上下文中? 我所能理解的最多的是,反应流在规范中有一些背压的概念,但在RxJava/Reactive中已经存在了请求(n)接口。 我不介意ELI5的回答。
本文向大家介绍有用过scss和sass吗?说说它们之间的区别是什么?相关面试题,主要包含被问及有用过scss和sass吗?说说它们之间的区别是什么?时的应答技巧和注意事项,需要的朋友参考一下 sass和scss其实是一样的css预处理语言,其后缀名是分别为 .sass和.scss两种。 SASS版本3.0之前的后缀名为.sass,而版本3.0之后的后缀名.scss。 两者是有不同的,继sass之后