序
本文主要向大家介绍Node.js流的使用,并分享给大家参考。下面就不多说了,我们来看看详细的介绍:
Flow是一个基于事件的API,用于管理和处理数据,具有很好的效率。借助事件和非阻塞输入输出库,流模块允许在可用时动态处理,在不需要时释放。
使用流的好处
举一个读取文件:的例子
使用fs.readFileSync同步读取文件,程序将被阻止,所有数据将被读入内存。
使用fs.readFile读取文件,程序不会被阻止,但所有数据仍会一次读入内存。
当处理大型文件压缩、归档、媒体文件和巨大的日志文件时,内存使用成为一个问题。在这种情况下,流媒体的优势就体现出来了。
该流被设计为异步的。与一次将剩余的文件数据读入内存相比,读取一个缓冲区是值得的。将执行预期的操作,并将结果写入输出流。
流量分类
小溪。可读流。可写-用于获取输入/输出流上的数据。双工-用于在输出目标上写入数据-可读和可写的流,如网络连接流。转换-以某种方式修改数据的双工流创建可读的流
方法一
var Stream=必需(' stream')var readable=Stream。可读();var source=['a ',' b ',' c '];可读。_ read=function(){ this . push(source . shift()| | null);}可读. pipe(process . stdin);方法2
变量可读=必需('流')。可读;函数MyStream(选项){可读. call(this,options);} MyStream . prototype=object . create(可读. prototype,{ constructor : { value : MyStream } });mystream . prototype . _ read=function(){ this . push(' hello ');this . push(null);} var streams=new Mystream();streams . pipe(process . stdin);方法3
var stream=required(' stream ');var util=require(' util ');函数MyStream(选项){ stream。可读. call(这个,选项);} MyStream . prototype . _ read=function(size){ this . push(' hello ');this . push(null);}util.inherits(MyStream,Stream。可读);var streams=new MyStream();streams . pipe(process . stdout);可读流的一些概念
可读流是提供数据的源的抽象
可读流的示例
http响应的模式,客户端http请求,服务器fs读取流zlib流加密流TCP套接字子进程stdout和stderr进程. stdin可读流
可读流有两种工作模式:流动和暂停。
在流动模式下,可读流自动从系统底层读取数据,并通过事件发射器接口的事件尽快将数据提供给应用程序。
可读流在创建时都处于暂停模式。
可读流可以在两种模式下切换。
暂停模式下的可读流可以通过以下三种方式切换到流动模式:
倾听“数据”事件。调用stream.resume()方法。调用stream.pipe()方法以流动模式将数据发送到可读流。您可以通过以下两种方式切换到暂停模式:
如果没有管道目标,可以通过调用stream.pause()方法来实现。如果有管道目标,可以通过取消‘data’事件监控,调用stream.unpipe()方法移除所有管道来实现。
可读流提供以下事件:
“Close”事件,该事件将在流或基础资源关闭后触发,但并非所有流都会触发此事件。当流将数据传递给使用者时,将触发“data”事件。当流转换到流动模式时,将触发此事件。“end”事件,仅在数据完全消耗后触发' error '事件,Error事件会在底层系统中产生错误,从而无法生成任何数据,或者当流的实现试图传递错误的数据时,会发生' readable '事件,当流中有数据可供读取时,会触发Readable事件。摘要
以上就是本文的全部内容。希望本文的内容能给你的学习或工作带来一些帮助。有问题可以留言交流。谢谢你的支持。