缓存模块和流模块

来源:互联网 发布:好特软件站 编辑:程序博客网 时间:2024/06/06 22:45
var fs=require("fs");fs.readFile("file.txt",function(err,data){if(err) throw err;console.log(data)});


结果:得到的是一个Buffer对象

<Buffer 61 0d 0a 61 0d 0a 61 0d 0a 61 0d 0a 61 0d 0a 61 0d 0a 0d 0a>


为了展示数据,必须将编码作为参数之一提供给fs.readFile()

var fs=require("fs");fs.readFile("file.txt","utf8",function(err,data){if(err) throw err;console.log(data)})


结果:

a

a

a

a

a

现在文件的内容会显示出来,不在是元素的缓存区

缓冲区是一个种处理二进制数据的一种方式,。由于javascript不能很好的处理二进制数据,所以缓冲区实际上是对原始内存的分配

---------------------------------------------------一以下为流模块内容--------------------------------------------------------------------------

流是一个标准概念,有如下三个主要流:

*标准输入

*标准输出

*标准错误

流能干嘛?

流可用于创建代理服务器 流服务器或者文件上传的服务,比如图像尺寸调整或视频编码转换

如何创建两个HTTP服务器,使用流从一个服务器代理到另一个服务器的流量?




可读流:

nodejs中的流是可以读/写的,它与早先看到的标准输入和标准输出有松散的关联:标准输入时可的 而标准输出是可

var fs=require("fs");var stream =fs.ReadStream("file.txt");var data="";stream.setEncoding("utf8");stream.on("data",function(chunk){<span style="white-space:pre"></span>data+=chunk;<span style="white-space:pre"></span>console.log("read some data");})stream.on("close",function(){   console.log("all the data is read----------")   console.log(data)//打印出txt文件里面的文字})

可写流:

显然,我们也可以创建可写流以便写数据。这意味着,只要一段简单的脚步,就可以使用流读入文件然后写入另外一个 文件

var fs=require("fs");var readStream =fs.ReadStream("file.txt");//读取文件var writeSteam=fs.WriteStream("file2.txt");//写入文件readStream.setEncoding("utf8");readStream.on("data",function(chunk){writeSteam.write(chunk);})readStream.on("close",function(){writeSteam.end();})


通过管道连接流:

pipe()方法会仔细处理事件,在需要的时候回暂停流并回复流的操作,所有触发需要对事件的发生完全控制,否则应该使用pipe(),效果同上

var fs=require("fs");var readStream =fs.ReadStream("file.txt");var writeSteam=fs.WriteStream("file2.txt");readStream.pipe(writeSteam)


媒体播放:

流可以在许多对象上也使用留下的HTTP模块一起使用,

在HTTP模块中,相应对象实际上是一个可写流。它让文件以可读流的方式写入。然后九宫格管道成为响应对象的可写流,这和我们看到的复制文件示例一样。

由于pipe()处理了所有需要的暂停和恢复,所以只需要几行代码,流MP3服务器就建成了

var http=require("http"),fs=require("fs");http.createServer(function(request,response){var mp3='danosongs.com-rapidarc.mp3';//一个mp3文件var stat=fs.statSync(mp3);response.writeHead(200,{"Content-Type":"audio/mpeg","Content-Length":stat.size});var readableStream=fs.createReadStream(mp3);readableStream.pipe(response);}).listen(3000);

效果:


0 0
原创粉丝点击