Node.js速学之-流模块

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

分享到:更多 ()