Node.js Streams文件读写操作详解

2020-06-17 07:24:48易采站长站整理

 1.Readable.pause() – 这个方法会暂停流的流动。换句话说就是它不会再触发 data 事件。
 2.Readable.resume() – 这个方法和上面的相反,会让暂停流恢复流动。
 3.Readable.unpipe() – 这个方法会把目的地移除。如果有参数传入,它会让可读流停止刘翔某个特定的目的地,否则,它会移除所有目的地。 

可写流 (Writable Streams)
可写流让你把数据写入目的地。就像可读流那样,这些也是 EventEmitter ,它们也会触发不同的事件。我们来看看可写流中会触发的事件和方法吧。
写入流 
要把数据写如到可写流中,你需要在可写流实例中调用 write() 方法,看看下面的例子:


var fs = require('fs');
var readableStream = fs.createReadStream('file1.txt');
var writableStream = fs.createWriteStream('file2.txt');

readableStream.setEncoding('utf8');

readableStream.on('data', function(chunk){
writableStream.write('chunk');
});

上面的代码非常简单,它只是从输入流中读取数据,然后用 write() 写入到目的地中。
 这个方法返回一个布尔值来表示写入是否成功。如果返回的是 true 那表示写入成功,你可以继续写入更多的数据。 如果是 false ,那意味着发生了什么错误,你现在不能继续写入了。可写流会触发一个 drain 事件来告诉你你可以继续写入数据。
 写完数据后
 当你不需要在写入数据的时候,你可以调用 end() 方法来告诉流你已经完成写入了。假设 res 是一个 HTTP response 对象,你通常会发送响应给浏览器:
res.write(‘Some Data!!’);
res.end();
当 end() 被调用时,所有数据会被写入,然后流会触发一个 finish 事件。注意在调用 end() 之后,你就不能再往可写流中写入数据了。例如下面的代码就会报错:
res.write(‘Some Data!!’);
res.end();
res.write(‘Trying to write again’); //Error !
这里有一些和可写流相关的重要事件:
 1.error – 在写入或链接发生错误时触发
 2.pipe – 当可读流链接到可写流时,这个事件会触发
 3.unpipe – 在可读流调用 unpipe 时会触发