Stream 是一个抽象接口,Node 中有很多对象实现了这个接口。
例如:对http 服务器发起请求的request 对象就是一个 Stream,还有stdout(标准输出)。
Stream 四种流类型:
-
Readable - 可读操作。
-
Writable - 可写操作。
-
Duplex - 可读可写操作.
-
Transform - 操作被写入数据,然后读出结果。
所有Stream 对象都是 EventEmitter 的实例
常用事件:
-
data - 当有数据可读时触发。
-
end - 没有更多的数据可读时触发。
-
error - 在接收和写入过程中发生错误时触发。
-
finish - 所有数据已被写入到底层系统时触发。
stream流 简单的使用方法
var fs = require('fs')
var myReadStream = fs.createReadStream(__dirname + '/readMe.txt')//读取 流
var myWriteStream = fs.createWriteStream(__dirname + '/writeMe.txt')//写入 流
myWriteStream.write('hello world')
myWriteStream.end()
myWriteStream.on('finish',function(){
console.log('write finish')
})
myReadStream.setEncoding('utf8')
var data = ''
// 等同于 myReadStream.pipe(myWriteStream) //pipe管道 读取readMe.txt流后写入 writeMe.txt流
myReadStream.on('data',function(chunk){
data+=chunk
myWriteStream.write(chunk)
})
myReadStream.on('end',function(){
console.log(data)
})
pipe管道简单的使用方法
从代码可以看出pipe可以更方便的复制文件
var fs = require('fs')
var myReadStream = fs.createReadStream(__dirname + '/readMe.txt')//读取 流
var myWriteStream = fs.createWriteStream(__dirname + '/writeMe.txt')//写入 流
myReadStream.pipe(myWriteStream) //pipe管道 读取readMe.txt流后写入 writeMe.txt流