在nodejs中可以通过fs模块读写文件,上篇文章页简单介绍了一下fs的用法
####1. fs.readFile(filename,fn)
异步读取文件,filename是要读取的文件名称,如果是相对路径,则通过当前进程执行的路径来查找文件。
fn是回调函数,有两个参数
第一个参数err(如果没有报错,该值为null),进行操作时,应先判断err是否有值。
第二个参数是代表文件内容的Buffer实例。
####2. fs.writeFile(filename,content,[,encode],fn)
异步写入文件,content是要写入的内容,encode为编码格式,默认是utf-8。
既然有异步,自然也会有同步,在每个异步函数后面加上Sync。
上面几个接口,无论是异步是同步,都是等文件读取完成才进行操作的。
如果操作的文件是一些小文件,这种操作是没有问题。
但是在服务器端,文件体积一般很大,用这种方式效率低,导致线程阻塞,甚至会因为内存不足而崩溃。
所以就有了stream
nodejs中Stream是EventEmitter的实现,你可以理解为程序后台打开了一个文件(不占用主线程)
程序会一点点的读取(写入)文件
1 | var fs = require('fs'); |
当调用fs.createReadStream时,相当于创建一个文件读取流。
可以通过监听Data事件,来读取的部分数据,来进行一些操作。也可以用pipe的写法
1 | var http = require("http"); |
###总结
通过上述例子,可以知道stream应该还拥有如何合并等更复杂的应用方式。总之整体上符合如下特性:
- Stream分为readable、writeable
- Stream通过pipe方法控制流向
- httpServer和httpClient和flie system 和 process.stdin\out\err通常可以作为Stream
- Stream可以被on转化为普通的变量,普通变量可以被write转换成Stream
- Stream自身可以被拆分、合并、过滤