博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Node.js教程第三篇—— Node.js 流
阅读量:7013 次
发布时间:2019-06-28

本文共 2116 字,大约阅读时间需要 7 分钟。

Stream 介绍

Stream 是一个抽象接口,Node 中有很多对象实现了这个接口。例如,对http 服务器发起请求的request 对象就是一个 Stream,还有stdout(标准输出)。往往用于打开大型的文本文件,创建一个读取操作的数据流。所谓大型文本文件,指的是文本文件的体积很大,读取操作的缓存装不下,只能分成几次发送,每次发送会触发一个data事件,发送结束会触发end事件。

读取流

var fs = require("fs");var data = '';// 创建可读流var readerStream = fs.createReadStream('input.txt');// console.log(readerStream);// 设置编码为 utf8。readerStream.setEncoding('UTF8');// 处理流事件 --> data, end, and errorreaderStream.on('data', function(chunk) {   data += chunk;});readerStream.on('end',function(){   console.log(data);});readerStream.on('error', function(err){   console.log(err.stack);});console.log("程序执行完毕");

写入流

创建一个可以写入的流,写入到文件 output.txt 中

var fs = require("fs");var data = '中国';// 创建一个可以写入的流,写入到文件 output.txt 中// var writerStream = fs.createWriteStream('output.txt', {'flags': 'a'}); //追加文本var writerStream = fs.createWriteStream('output.txt');// 使用 utf8 编码写入数据writerStream.write(data,'UTF8');// 标记文件末尾writerStream.end();// 处理流事件 --> data, end, and errorwriterStream.on('finish', function() {    console.log("写入完成。");});writerStream.on('error', function(err){   console.log(err.stack);});console.log("程序执行完毕");

管道流

<img src="; height = "300" />

管道提供了一个输出流到输入流的机制。通常我们用于从一个流中获取数据并将数据传递到另外一个流中。我们把文件比作装水的桶,而水就是文件里的内容,我们用一根管子(pipe)连接两个桶使得水从一个桶流入另一个桶,这样就慢慢的实现了大文件的复制过程。以下实例我们通过读取一个文件内容并将内容写入到另外一个文件中。

var fs = require("fs");// 创建一个可读流var readerStream = fs.createReadStream('input.txt');// 创建一个可写流 // {'flags': 'a'}//追加文本var writerStream = fs.createWriteStream('output.txt');// 管道读写操作// 读取 input.txt 文件内容,并将内容写入到 output.txt 文件中readerStream.pipe(writerStream);console.log("程序执行完毕");

链式流

链式是通过连接输出流到另外一个流并创建多个对个流操作链的机制。链式流一般用于管道操作。接下来我们就是用管道和链式来压缩和解压文件。

压缩

var fs = require("fs");//压缩和解压的模块var zlib = require('zlib');// 压缩 input.txt 文件为 input.txt.gz// 以流的方式读取文本fs.createReadStream('input.txt')  .pipe(zlib.createGzip()) //把读取出来的文本调用压缩模块进行压缩  .pipe(fs.createWriteStream('input.zip'));//把压缩好的流进行保存  console.log("文件压缩完成。");

解压

var fs = require("fs");//压缩和解压的模块var zlib = require('zlib');fs.createReadStream('input.zip')  .pipe(zlib.createGunzip())  .pipe(fs.createWriteStream('input1.txt'));  console.log("文件解压完成。")

转载地址:http://thqtl.baihongyu.com/

你可能感兴趣的文章
2 - 建立 Django 博客应用
查看>>
【iOS报错】“this class is not key value coding-compliant for the key userPhoneNum”给字典设置键值对的时候报错...
查看>>
UI技术总结--性能优化
查看>>
Android NDK JNI 开发之旅01 环境搭建入门篇
查看>>
Javascript之迭代器模式
查看>>
Flutter花式玩转TextField,写一个验证码输入框超简单!
查看>>
RxJava应用:实现七牛云多图上传
查看>>
Tmux入门教程
查看>>
智能直播审核方案:视频云智能业务截帧策略
查看>>
亲历者说:Kubernetes API 与 Operator,不为人知的开发者战争
查看>>
[ARKit]10-3D模型怎么制作,哪里寻找,如何使用?
查看>>
Kotlin结合DataBinding简单封装一个RecyclerView的Adapter
查看>>
Android爬坑之旅之不易发现的BUG
查看>>
数值计算 插值与拟合
查看>>
支付与签名原串的那些事,但选择排序生成签名原串
查看>>
koa2开发微信公众号: 不定期推送最新币圈消息
查看>>
小tips:JS中this操作执行像(object.getName = object.getName)()操作改变了this
查看>>
为什么国外的 App 很少会有开屏广告?
查看>>
移动端中webview的h5访问,出现了运营商的广告解决方案
查看>>
PHP curl 返回Connection timed out解决办法
查看>>