Nodejs 流的操作

 

Stream(流)

  简介

       Stream是一个抽象接口,所有的Stream都是EventEmitter的实例,Stream有四种类型:

  1. Readable 可读
  2. Writeable 可写
  3. Duplex 可读可写操作
  4. Transform 操作被写入数据、然后读出结果

 

  常用事件

  1. data—有数据可读时触发
  2. end—没有数据可读时触发
  3. error—在接受或写入过程中发生错误
  4. finish—所有数据被写入到底层系统时触发

 

 

   读/写数据

              读取

                     实例

var fs =  require("fs");
var
data = '';

var
rs = fs.createReadStream("E:/for_file/6.txt");
rs.setEncoding('UTF8');
rs.on('data',function (content) {
    data += content;
});


rs.on('end',function () {
   console.log(data);
});

rs.on('error',function (err) {
   console.log(err.stack);
});

console.log("over");

                     运行结果:

             

var readerStream = fs.createReadStream('路径');

读取文件内容:

                     如果可读:data = data+content(读取到的文件内容);

                     如果无数据可读:输出data

 

            写入

            实例

var fs =  require("fs");
var
data = '一个人至少拥有一个梦想,有一个理由去坚强。心若没有栖息的地方,到哪里都是在流浪。';

var
ws = fs.createWriteStream('E:/for_file/6.txt');
ws.write(data,'UTF8');//按照utf8编码写入数据
ws.end();//标记末尾

ws.on('finish',function () {
   console.
log("over");
});

ws.on('error',function (e) {
    console.
log(e.stack);
});

console.log("finish");

            运行结果:

            createWriteStream()按照路径创建一个文件

              监听finish和error事件

 

 管道流

  1. 首先执行 readbable.pipe(writable),将 readable 与 writable 对接上
  2. 当 readable 中有数据时,readable.emit('data'),将数据写入 writable
  3. 如果 writable.write(chunk) 返回 false,则进入 pause 模式,等待 drain 事件触发
  4. drain 事件全部触发后,再次进入 flow 模式,写入数据
  5. 不管数据写入完成或发生中断,最后都会调用 unpipe()
  6. unpipe() 调用 Readable.prototype.unpipe(),触发 dest 的 unpipe 事件,清理相关数据

 

实例

var fs = require("fs");
var
rs = fs.createReadStream("E:/for_file/6.txt");
var
ws = fs.createWriteStream("E:/for_file/7.txt");

rs.pipe(ws);
console.log("over");

 

运行结果:

 

 

链式流

        连接readerStream和writeStream并进行操作

 

实例

var fs = require('fs');
var
zlib = require('zlib');

fs.createReadStream('E:/for_file/6.txt')
  .
pipe(zlib.createGzip())
    .
pipe(fs.createWriteStream('E:/for_file/7.txt.gz'));

console.log("ovre");

 

运行结果:

 


var fs = require("fs");
var
zlib = require('zlib');

// 压缩 input.txt 文件为 input.txt.gz
fs.createReadStream('E:/for_file/6.txt.gz')
    .
pipe(zlib.createGunzip())
    .
pipe(fs.createWriteStream('E:/for_file/7.txt'));

console.log("文件解压完成。");

运行结果:

猜你喜欢

转载自blog.csdn.net/xxtnt/article/details/83058103