参考文献:[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()管道将可读流和可写流连接到一起,它会为我们处理暂停会恢复。而且,管道可以连接到多个流上。
流,数据在整个操作完成之前就可以使用了。