node.js(3)

stream流

Stream 是一个抽象接口,Node 中有很多对象实现了这个接口。例如,对http 服务器发起请求request 对象就是一个
Stream,还有stdout(标准输出)。
Node.js,Stream 有四种流类型:
Readable - 可读操作。
Writable - 可写操作。
Duplex - 可读可写操作.
Transform - 操作被写入数据,然后读出结果。
所有的 Stream 对象都是 EventEmitter 的实例。常用的事件有:
data - 当有数据可读时触发。
end - 没有更多的数据可读时触发。
error - 在接收和写入过程中发生错误时触发。
finish - 所有数据已被写入到底层系统时触发

1. 创建可读流

//从流中读取数据
var fs=require("fs");
//设置读取的数据
var data="";
// 创建流
var readStream=fs.createReadStream("content.txt");
//设置编码格式
readStream.setEncoding("UTF-8");
//处理流的事件
//data  有数据可读的时候触发
readStream.on("data",function (res){
    data+=res;
});
//没有数据可读时触发
readStream.on("end",function (){
    console.log(data);
});
//在读取时发生错误时触发
readStream.on("error",function (err){
    console.log(err);
});
//写入完成的时候触发
writeStream.on("finish", () => {
	console.log("数据写入完成");
});

2. 写入流

  streamdata.on("end", () => {
        console.log("数据读取完成");
        console.log(data);
        //创建写入流
        let writeStream = fs.createWriteStream(__dirname + "/1117.docx");
        //配置写入的数据以及编码
        writeStream.write(data, 'utf-8');
        writeStream.end();
        //写入出错
        writeStream.on("err", (err) => {
            if (err) {
                throw err;
            }
        });
        //写入完成的时候触发
        writeStream.on("finish", () => {
            console.log("数据写入完成");
        });
    });

3. 管道流(边读边写)

// 管道流  边读边写
let readstream = fs.createReadStream("public/stu.txt");
    let writestream = fs.createWriteStream("public/data.txt");
    readstream.pipe(writestream);

    readstream.on("end", () => {
        console.log("管道流读取数据完成");
    });
    writestream.on("finish", () => {
        console.log("管道刘写入数据完成");
    });

node里面的阻塞IO和非阻塞IO

Nodejs 非阻塞的IO、异步以及事件驱动EventEmitter 处理异步
Nodejs单线程 非阻塞IO 事件驱动
Nodejs回调处理异步
Nodejs events模块处理异步

1. 回调函数处理异步 (非阻塞)

var fs=require("fs");
//阻塞请求数据  等待请求完成在执行后续代码
var data=fs.readFileSync("mime.json");
console.log(data.toString());

// 非阻塞式请求代码  nodejs中多数方法为异步请求方式
fs.readFile("mime.json",function (err,res){
    if(err) throw err;
    console.log(res.toString());
});
console.log(1);

//处理异步请求  外边可以获取到请求的数据的方式
//1.使用回调函数来获取数据

function getMime(callback){
    fs.readFile("mime.json",function (err,res){
        if(err) throw err;
        callback(res.toString());
    });
}
console.log(1);
//这样就可以在外部获取异步的数据  也可以暴露出去别的文件使用
module.exports=getMime(function (data){
    console.log(data);
});

2. 使用nodejs内置模块事件的驱动 events 来进行数据的广播和监听

var fs=require("fs");

var event=require("events");
//实例化事件的对象
var EventEmitter=new event.EventEmitter();
//使用events模块 获取异步的数据
//在请求完数据之后进行广播
fs.readFile("mime.json",function (err,res){
    if(err) throw err;
    EventEmitter.emit("mime",res.toString());
});

//在外部进行监听广播
EventEmitter.on("mime",function (data){
    console.log(data);
});

//在不同的文件之间广播和监听使用都可以获取数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值