查看“Node.js:Stream”的源代码
←
Node.js:Stream
跳到导航
跳到搜索
因为以下原因,您没有权限编辑本页:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
[[category:Node.js]] == 关于 == Stream 是一个抽象接口,Node 中有很多对象实现了这个接口。 : 例如,对http 服务器发起请求的request 对象就是一个 Stream,还有stdout(标准输出)。 Node.js.Stream 有四种流类型: # '''Readable''':可读操作。 # '''Writable''':可写操作。 # '''Duplex''':可读可写操作. # '''Transform''':操作被写入数据,然后读出结果。 '''所有的 Stream 对象都是 EventEmitter 的实例'''。 常用的事件有: # '''data''':当有数据可读时触发。 # '''end''':没有更多的数据可读时触发。 # '''error''':在接收和写入过程中发生错误时触发。 # '''finish''':所有数据已被写入到底层系统时触发。 == Stream使用 == === 写入流 === 创建 main.js 文件, 代码如下: <syntaxhighlight lang="JavaScript" highlight=""> var fs = require("fs"); var data = '菜鸟教程官网地址:www.runoob.com'; // 创建一个可以写入的流,写入到文件 output.txt 中 var writerStream = fs.createWriteStream('output.txt'); // 使用 utf8 编码写入数据 writerStream.write(data,'UTF8'); // 标记文件末尾 writerStream.end(); // 处理流事件 --> finish、error writerStream.on('finish', function() { console.log("写入完成。"); }); writerStream.on('error', function(err){ console.log(err.stack); }); console.log("程序执行完毕"); </syntaxhighlight> 以上程序会将 data 变量的数据写入到 output.txt 文件中。代码执行结果如下: <syntaxhighlight lang="bash" highlight=""> $ node main.js 程序执行完毕 写入完成。 </syntaxhighlight> 查看 output.txt 文件的内容: <syntaxhighlight lang="bash" highlight=""> $ cat output.txt 菜鸟教程官网地址:www.runoob.com </syntaxhighlight> === 读取流 === 创建 input.txt 文件,内容如下: <syntaxhighlight lang="bash" highlight=""> 菜鸟教程官网地址:www.runoob.com </syntaxhighlight> 创建 main.js 文件, 代码如下: <syntaxhighlight lang="JavaScript" highlight=""> var fs = require("fs"); var data = ''; // 创建可读流 var readerStream = fs.createReadStream('input.txt'); // 设置编码为 utf8。 readerStream.setEncoding('UTF8'); // 处理流事件 --> data, end, and error readerStream.on('data', function(chunk) { data += chunk; }); readerStream.on('end',function(){ console.log(data); }); readerStream.on('error', function(err){ console.log(err.stack); }); console.log("程序执行完毕"); </syntaxhighlight> 以上代码执行结果如下: <syntaxhighlight lang="bash" highlight=""> $ node main.js 程序执行完毕 菜鸟教程官网地址:www.runoob.com </syntaxhighlight> === 管道流 === 管道提供了一个'''输出流到输入流'''的机制。 * 通常我们用于:'''从一个流中获取数据并将数据传递到另外一个流中'''。 使用管道流连接两个文件,可以实现'''大文件的复制'''过程。 设置 input.txt 文件内容如下: <syntaxhighlight lang="bash" highlight=""> 菜鸟教程官网地址:www.runoob.com 管道流操作实例 </syntaxhighlight> 创建 main.js 文件, 代码如下: <syntaxhighlight lang="JavaScript" highlight="11"> var fs = require("fs"); // 创建一个可读流 var readerStream = fs.createReadStream('input.txt'); // 创建一个可写流 var writerStream = fs.createWriteStream('output.txt'); // 管道读写操作 // 读取 input.txt 文件内容,并将内容写入到 output.txt 文件中 readerStream.pipe(writerStream); console.log("程序执行完毕"); </syntaxhighlight> 代码执行结果如下: <syntaxhighlight lang="bash" highlight=""> $ node main.js 程序执行完毕 </syntaxhighlight> 查看 output.txt 文件的内容: <syntaxhighlight lang="bash" highlight=""> $ cat output.txt 菜鸟教程官网地址:www.runoob.com 管道流操作实例 </syntaxhighlight> === 链式流 === 链式是'''通过连接输出流到另外一个流,并创建多个流操作链的机制'''。 * 链式流一般'''用于管道操作'''。 使用管道和链式可以来压缩和解压文件。 # 压缩: #: 创建 compress.js 文件, 代码如下: #: <syntaxhighlight lang="JavaScript" highlight=""> var fs = require("fs"); var zlib = require('zlib'); // 压缩 input.txt 文件为 input.txt.gz fs.createReadStream('input.txt') .pipe(zlib.createGzip()) .pipe(fs.createWriteStream('input.txt.gz')); console.log("文件压缩完成。"); </syntaxhighlight> #: 代码执行结果如下: #: <syntaxhighlight lang="bash" highlight=""> $ node compress.js 文件压缩完成。 </syntaxhighlight> #: 执行完以上操作后,我们可以看到当前目录下生成了 input.txt 的压缩文件 input.txt.gz。 # 解压: #: 创建 decompress.js 文件,代码如下: #: <syntaxhighlight lang="JavaScript" highlight=""> var fs = require("fs"); var zlib = require('zlib'); // 解压 input.txt.gz 文件为 input.txt fs.createReadStream('input.txt.gz') .pipe(zlib.createGunzip()) .pipe(fs.createWriteStream('input.txt')); console.log("文件解压完成。"); </syntaxhighlight> #: 代码执行结果如下: #: <syntaxhighlight lang="bash" highlight=""> $ node decompress.js 文件解压完成。 </syntaxhighlight>
返回至“
Node.js:Stream
”。
导航菜单
个人工具
登录
命名空间
页面
讨论
大陆简体
已展开
已折叠
查看
阅读
查看源代码
查看历史
更多
已展开
已折叠
搜索
导航
首页
最近更改
随机页面
MediaWiki帮助
笔记
服务器
数据库
后端
前端
工具
《To do list》
日常
阅读
电影
摄影
其他
Software
Windows
WIKIOE
所有分类
所有页面
侧边栏
站点日志
工具
链入页面
相关更改
特殊页面
页面信息