node.js第四天//Node.js Stream(流)

读数据

var rs = fs.createReadStream(filePath , {options});
options是一组key-value值,常用的设置如下:

flags: 对文件进行何种操作,默认为’r’,读文件

encoding:指定编码,默认为null,如果不设置具体的编码格式,读出的数据就是Buffer类型;也可以使用rs.setEncoding(“utf-8”)指定编码格式

start:从start开始读取文件

end:读取文件到end为止(包括end)

highWaterMark:最高水位线,内部缓冲区最多能容纳的字节数,如果超过这个大小,就停止读取资源文件,默认值是64KB

需要触发的函数
data:有数据需要读取时触发
error:发生错我时触发
end:读取完毕时触发
读取实例:

var fs = require('fs');//引入fs模板
var read = fs.createReadStream('t.text');//创建可读流
var data = ''
read.setEncoding('UTF8')//设置成utf-8编码
read.on('data', function(text) {//有数据可以读时触发
    data += text;
})
read.on("error", function(err) {//发生错误时触发
    console.log(err.stack);
})
read.on('end', function() {//读取数据结束时触发
    console.log(data);
})

写入数据(覆盖式)

触发的函数
finish:写入完成
error:发生错误
实例:

var fs = require('fs')
var write = fs.createWriteStream('t.text');
write.write('mm', 'UTF8');
write.on('finish', function() {
    console.log("写入完成")
})
write.on('error', function(err) {
    console.log(err.stack);
})
write.end();

这种写法是完全覆盖文件里面原来的内容

管道流(从一个文件读数据到另一个文件)

这种适用于复制内容很多的文件
也是全文覆盖

var fs = require('fs');
var read = fs.createReadStream('in.text');
var write = fs.createWriteStream('out.text');
//管道读取
//读取in.text中的内容写入到out.text文件中
read.pipe(write);

链式流

链式流一般用于管道操作,压缩和解压文件

var fs = require('fs');
var zlib = require('zlib');
fs.createReadStream('in.text')
    .pipe(zlib.createGzip())
    .pipe(fs.createWriteStream('input.txt.gz'));
console.log('文件压缩完成');
fs.createReadStream('input.txt.gz')
    .pipe(zlib.createGzip())
    .pipe(fs.createWriteStream('input.txt'));
console.log("解压完成");

写入数据(追加式)

var ws = fs.createWriteStream(filePath, {options});
flags:对文件进行何种操作,默认为“w",代表写文件;如果是"a",代表每次写入的时候,不清空文件中的原有数据,而是直接在原有数据的末尾添加新数据

encoding:指定写入的编码格式,默认为null

start:文件开始写入的位置

highWaterMark:缓存区能够容纳的最大字节数,默认为16KB,如果超过这个值,write方法就会返回false

var fs = require('fs');
var read = fs.createReadStream('in.text');
//设置第二个参数append
var write = fs.createWriteStream('out.text', { 'flags': 'a' });
//管道流读写操作
read.pipe(write);
console.log('执行完毕');
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值