学node的一点小笔记(四) stream 流

//stream(流)是一个抽象接口,node中有很多对象实现了这个接口
//例如对http服务器发起请求的request对象就是一个stream
//四种流类型:
//Readable:可读
//Writeable:可写
//Duplex:可读写
//Transform:操作被写入数据然后读出结果
//所有stream对象都是EventEmitter的实例
//常用事件:
//data:有数据可读时触发
//end:没有更多数据可读时触发
//error:发生错误时触发
//finish:所有数据都已写入底层系统时触发
var fs = require( 'fs');
var data = '';

//创建可读流
var readStream = fs. createReadStream( 'kill.txt');

//设置编码为utf8
readStream. setEncoding( 'UTF8');

//处理流事件 data,end,error
//chunk可以理解为流数据中的一块数据,对可读流它是Stream读取的数据块,对可写流它是Stream写入的数据块。
readStream. on( 'data', function( chunk){
data += chunk;
})

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

//stack:属性
readStream. on( 'error', function( err){
console. log( err. stack)
})

var data1 = '烦死了';

//创建写入流
var writeStream = fs. createWriteStream( 'kill.txt');

//写入 设置编码
writeStream. write( data1, 'UTF8');

//处理流事件
writeStream. on( 'finish', function(){
//不知道为什么没有输出“写入完成”,但是数据是写进去了
console. log( '写入完成')
})

//处理错误
writeStream. on( 'error', function( err){
console. log( err. stack)
})

//创建一个可写流
var writeStream1 = fs. createWriteStream( 'input.txt');
readStream. pipe( writeStream1);

//必须俩参数都写,否则只写data默认是err
fs. readFile( 'input.txt', function( err, data){
console. log( data. toString())
})

//链式流
var zlib = require( 'zlib');
//压缩input.txt文件为input.txt.gz
readStream. pipe( zlib. createGzip())
readStream. pipe( fs. createWriteStream( 'input.txt.gz'));
console. log( '压缩完成')

fs. createReadStream( 'input.txt.gz')
. pipe( zlib. createGunzip())
. pipe( fs. createWriteStream( 'input.txt'));
console. log( '解压完成')

猜你喜欢

转载自blog.csdn.net/qq_37628661/article/details/79654053
今日推荐