百分百源码网-让建站变得如此简单! 登录 注册 签到领金币!

主页 | 如何升级VIP | TAG标签

当前位置: 主页>网站教程>JS教程> Node.js 读写流Stream学习笔记
分享文章到:

Node.js 读写流Stream学习笔记

发布时间:01/15 来源: 浏览: 关键词:
下面我们来看一篇关于Node.js 读写流Stream学习笔记,希望这篇文章对各位同学会带来帮助,让各位更好的理解Node.js 读写流Stream操作。

一. 可读流: stream.Readable

在Node.js中,各种实现了stream.Readable接口的对象可以将对象数据读取为流数据,所有这些对象都集成了EventEmitter类的实例对象,在读取数据的过程中,将可能触发各种事件。

在Node.js中,可以使用flowing模式与非flowing模式来读取数据。当使用flowing模式时,将使用操作系统内部I/O机制来读取数据,这将允许你以最快的速度来读取数据。当使用非flowing模式时,就必须显式调用对象的read方法来读取数据。

Node.js中的各种用于读取数据的对象如下:

可读流对象将有可能触发的事件如下:

可读流对象所拥有的方法如下:

二. 可写流: stream.Writeable

在Node.js中,各种实现了stream.Writeable接口的对象来将数据流写入到对象中,所有这些对象都是继承了EventEmitter类的实例对象。

各种用于写入数据的对象如下:

可写流对象将有可能触发的事件有:


可写流对象所拥有的方法有:

三. 使用ReadStream对象读取文件

在fs模块中,可以使用createReadStream()方法创建一个将文件内容读取为流数据的ReadStream对象,该方法的使用方式如下:

 fs.createReadStream(path [, options])
参数:

path: 需要被读取的文件的完整路径及文件名;
options: 数据类型为对象,可选,其属性值有:
flags: 用于指定对该文件采取什么操作,默认值为”r”;
encoding: 用于指定使用什么编码格式来读取该文件。可指定属性值为”utf8″、”ascii”、”base64″。默认值为null;
autoClose:用于指定是否关闭在读取文件时操作系统内部使用的文件描述符。如果属性值设置为false,则文件不会自动关闭,即使在读取文件过程中产生了错误,开发者也必须通过使用close方法或closeSync方法来手动关闭文件。如果属性值设定为true,则文件读取完毕或读取文件过程中产生错误时,文件将自动关闭。默认值为true;
start: 指定文件开始读取位置(单位为字节数);
end: 指定文件结束读取位置(单位为字节数)。

实例一:使用ReadStream方法读取文件

var fs = require('fs');

var file = fs.createReadStream("1.js");
file.on("open", function(fd) {
    console.log("开始读取文件:");
});
file.on("data", function(data) {
    console.log("读取到数据:");
     console.log(data);
});
file.on("end", function() {
     console.log("文件已全部读取完毕。");
});
file.on("close", function() {
    console.log("文件被关闭。");
});
file.on("error", function() {
    console.log("读取文件失败。");
});
console打印值如下:

开始读取文件:

读取到数据:
<Buffer 63 6f 6e 73 74 20 6f 73 20 3d 20 72 65 71 75 69 72 65 28 27 6f 73 27 29 3b 0d 0a 0d 0a 76 61 72 20 74 79 70 65 20 3d 20 6f 73 2e 74 79 70 65 28 29 3b>
文件已全部读取完毕。
文件被关闭。

实例二:使用ReadStream方法延时读取文件

打开文件后暂停文件的读取,隔3秒钟后开始读取文件并在控制台中输出文件内容:

var fs = require('fs');

var file = fs.createReadStream("1.js");
file.pause();
file.on("data", function(data) {
    console.log("读取到数据:");
     console.log(data);
});
setTimeout(function() {
    file.resume();
}, 3000);
四. 使用ReadStream对象读取文件

在fs模块中,可以使用createWriteStream()方法创建一个将文件内容读取为流数据的ReadStream对象,该方法的使用方式如下:

 fs.createWriteStream(path [, options])
参数与 fs.createWriteStream()方法的类似。

write()方法:
WriteStream对象具有一个write()方法,用于将数据流写入目标对象,该方法的使用方式如下:

writable.write(trunk, [encoding], [callback])
其中,trunk为一个Buffer对象或一个字符串,用于指定写入的数据。 当trunk为字符串时,可以指定encoding参数值来指定将数据以何种编码方式写入文件。

end()方法
WriteStream对象还具有一个end()方法,用于将数据流写入目标对象,该方法的使用方式如下:

writable.end([trunk], [encoding], [callback])
其中trunk表示在文件关闭之前需要在文件中追加写入的数据。

bytesWritten属性:
另外,WriteStream对象还具有一个bytesWritten属性,属性值为当前已在文件中写入数据的字节数。

实例:文件拷贝
var fs = require('fs');

var file = fs.createReadStream("1.js");
var outputFile = fs.createWriteStream("output.js");
file.on("data", function(data) {
    outputFile.write(data);
});
outputFile.on("open", function(fd) {
    console.log("需要被写入的文件已被打开。");
});
file.on("end", function() {
    outputFile.end("The end.", function() {
        console.log("文件全部写入完毕。");
        console.log("共写入%d字节数据。", outputFile.bytesWritten);
    });
});
console输出值如下:

需要被写入的文件已被打开。
文件全部写入完毕。
共写入206字节数据。
此时,output.js已完整拷贝了1.js中的全部内容。

打赏

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

百分百源码网 建议打赏1~10元,土豪随意,感谢您的阅读!

共有5人阅读,期待你的评论!发表评论
昵称: 网址: 验证码: 点击我更换图片
最新评论

本文标签

广告赞助

能出一分力是一分吧!

订阅获得更多模板

本文标签

广告赞助

订阅获得更多模板