本文实例讲述了node.js中stream流中可读流和可写流的实现与使用方法。分享给大家供大家参考,具体如下:
成都创新互联一直在为企业提供服务,多年的磨炼,使我们在创意设计,成都全网营销到技术研发拥有了开发经验。我们擅长倾听企业需求,挖掘用户对产品需求服务价值,为企业制作有用的创意设计体验。核心团队拥有超过十多年以上行业经验,涵盖创意,策化,开发等专业领域,公司涉及领域有基础互联网服务成都服务器托管、app开发定制、手机移动建站、网页设计、网络整合营销。node.js中的流 stream 是处理流式数据的抽象接口。node.js 提供了很多流对象,像http中的request和response,和 process.stdout 都是流的实例。
流可以是 可读的,可写的,或是可读可写的。所有流都是 events 的实例。
一、流的类型
node.js中有四种基本流类型:
1、Writable 可写流 (例:fs.createWriteStream() )
2、Readable 可读流 (例:fs.createReadStream() )
3、Duplex 可读又可写流 (例:net.Socket )
4、Transform 读写过程中可修改或转换数据的 Duplex 流 (例:zlib.createDeflate() )
二、流中的数据有两种模式
1、二进制模式,都是 string字符串 和 Buffer。
2、对象模式,流内部处理的是一系统普通对象。
三、可读流的两种模式
1、流动模式 ( flowing ) ,数据自动从系统底层读取,并通过事件,尽可能快地提供给应用程序。
2、暂停模式 ( paused ),必须显式的调用 read() 读取数据。
可读流 都开始于暂停模式,可以通过如下方法切换到流动模式:
1、添加 'data' 事件回调。
2、调用 resume()。
3、调用 pipe()。
可读流通过如下方法切换回暂停模式:
1、如果没有管道目标,调用 pause()。
2、如果有管道目标,移除所有管道目标,调用 unpipe() 移除多个管道目标。
四、创建可读流,并监听事件
const fs = require('fs'); //创建一个文件可读流 let rs = fs.createReadStream('./1.txt', { //文件系统标志 flags: 'r', //数据编码,如果调置了该参数,则读取的数据会自动解析 //如果没调置,则读取的数据会是 Buffer //也可以通过 rs.setEncoding() 进行设置 encoding: 'utf8', //文件描述符,默认为null fd: null, //文件权限 mode: 0o666, //文件读取的开始位置 start: 0, //文件读取的结束位置(包括结束位置) end: Infinity, //读取缓冲区的大小,默认64K highWaterMark: 3 }); //文件被打开时触发 rs.on('open', function () { console.log('文件打开'); }); //监听data事件,会让当前流切换到流动模式 //当流中将数据传给消费者后触发 //由于我们在上面配置了 highWaterMark 为 3字节,所以下面会打印多次。 rs.on('data', function (data) { console.log(data); }); //流中没有数据可供消费者时触发 rs.on('end', function () { console.log('数据读取完毕'); }); //读取数据出错时触发 rs.on('error', function () { console.log('读取错误'); }); //当文件被关闭时触发 rs.on('close', function () { console.log('文件关闭'); });
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。