Node.js,Stream 有四种流类型:
Readable - 可读操作。
Writable - 可写操作。
Duplex - 可读可写操作.
Transform - 操作被写入数据,然后读出结果。
所有的 Stream 对象都是 EventEmitter 的实例。常用的事件有:
data - 当有数据可读时触发。
end - 没有更多的数据可读时触发。
error - 在接收和写入过程中发生错误时触发。
finish - 所有数据已被写入到底层系统时触发。
本教程会为大家介绍常用的流操作。
Stream的四种类型
- Readable: 可读操作
- Writeable: 可写操作
- Transform: 操作被写入数据,然后读出结果
- Duplex: 可读可写操作
常用事件
- data: 当有数据可读时触发
- end: 当没有更多数据可读时触发
- error: 在接收和写入的过程中发生错误时触发
- finish: 所有数据被写入底层系统时触发
从流中读数据
- 创建文件 hello.js
hello stream!
- 创建main.js, 读取hello.js
var fs = require('fs');
var data = ''
// 创建可读流
var readerStream = fs.createReadStream('hello.txt');
// 设置编码格式
readerStream.setEncoding('UTF8');
// 监听data事件,处理数据
readerStream.on('data', (chunk) => {
data = data + chunk;
console.log(data);
})
// error处理
readerStream.on('error', () => {
console.log('readerStream call error', error)
})
console.log('code run end');
- 代码运行结果
code run end
hello stream!
写入流
// 创建一个可以写入的流,写入到文件 output.txt 中
// 使用 utf8 编码写入数据
// 标记文件末尾
// 处理流事件 --> data, end, and error
console.log("程序执行完毕");
var fs = require('fs');
var data = '写入流的data';
// 创建一个可以写入的流
var writeStream = fs.createWriteStream('output.txt');
// 设置utf8编码
writeStream.setEncoding('UTF8');
// 写入内容
writeStream.write(data);
// 标记文件末尾
writeStream.end()
// 监听事件
writeStream.on('end', () => {
console.log('write end');
})
writeStream.on('error', () => {
console.log('write stream error', error);
})
console.log('code run code');