参考文献:[1][EN]Georgo Ornbo.傅强.陈宗斌. Node.js入门经典[M]. 北京:人民邮电出版社.2013.4-1
UNIX系统中,流是标准概念,有:标准输入流/标准输出流/标准错误流
这些流都是标准接口,所以程序可以从流中读写。
一、可读流
var fs = require ('fs'); var stream = fs.ReadStream('file.txt'); var dataa = ''; stream.setEncoding('utf8'); stream.on('data',function(chunk){//可读流侦听事件,其实是EventEmitter实例,收到数据时会触发 //经过测试,侦听的‘data’消息的名称不能改变 dataa+=chunk; console.log('read some data'); }); stream.on('close',function() {//可读流侦听事件,触发关闭事件 console.log('all the data is read'); console.log(dataa); })
终端:
read some data all the data is read AA,BB CC SS,SSS Process finished with exit code 0
二、可写流
var fs = require ('fs'); var streamread = fs.ReadStream('file.txt'); var streamwrite= fs.WriteStream('write.txt'); streamread.setEncoding('utf8'); streamread.on('data',function(chunk){ streamwrite.write(chunk);//写入 console.log('read and write some data'); }); streamread.on('close',function(){ console.log('all the data id read'); streamwrite.end();//关闭写流 });
终端:
read and write some data all the data id read
三、管道连接流
输入和输出通过管道传输在Node.js中比较常见,可读和可写流他们之间通过管道传输数据的方法也较常用。
var fs = require ('fs'); var streamread = fs.ReadStream('file.txt'); var streamwrite= fs.WriteStream('write.txt'); streamread.pipe(streamwrite); //缓冲区被用于读写流中的数据
成功拷贝。
四、音频流
在HTTP模块中,响应对象实际上是一个可写流,它可让文件已可读流的方式写入,然后通过管道成为进入响应对象的可写流。、
var http = require ('http'); fs = require('fs'); http.createServer(function(request,response){ var mp3 = 'music.mp3'; var stat = fs.statSync(mp3); response.writeHead(200,{'Content-Type':'audio/mpeg','Content-Length':'stat.size'}); var readableStream=fs.createReadStream(mp3); readableStream.pipe(response); }).listen(3000); //此实例失败,原因未知,以后再探索
pipe()管道将可读流和可写流连接到一起,它会为我们处理暂停会恢复。而且,管道可以连接到多个流上。
流,数据在整个操作完成之前就可以使用了。