添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
腼腆的大象  ·  使用node.js 调用 ...·  22 小时前    · 
闯红灯的便当  ·  初试 Electron 远程调试·  1 周前    · 
痴情的鸡蛋  ·  Node.js Stream 流 pipe ...·  1 月前    · 
骑白马的毛豆  ·  iphone js websocket ...·  4 月前    · 
温柔的豆浆  ·  文化和自然遗产日 | ...·  3 周前    · 
淡定的小摩托  ·  Work — Jacek ...·  3 月前    · 

Stream

是一种抽象的概念,它表示的含义是,文件的传输,就像水流一样,通过 管道 一点一点的传向目的地。流的背后,是一个又一个的 缓冲区 ,提前为数据做好了准备。

我们在前面小节列举过 fs模块 ,用它读取过文件。它的做法是把数据一次性读取到内存中,如果写入是一次性把内存中的数据写入到磁盘。如果我们读取的文件非常小,那这样做是没有问题,但是如果是大容量的文件 10G ,甚至更大,那么这种模型就很有问题了。

而 Stream 的理念是 边读边取 ,用这种 IO 方式就破解了上面的难题,节省空间和时间。

以流的形式读取文件 var fs = require('fs'); var rs = fs.createReadStream('filename', 'utf-8') // 得到的 rs 是一个输出流句柄,通过事件触发得到它到状态 // 数据开始读取... // data 事件可能会读取多次,每次读取一块数据 rs.on('data', function (chunk) { console.log('DATA:') console.log(chunk) // 读完触发 rs.on('end', function () { console.log('END') // 错误触发 rs.on('error', function (err) { console.log('ERROR: ' + err) 以流的形式写入文件 var fs = require('fs') var ws = fs.createWriteStream('filename', 'utf-8') ws.write('1') // 一点 ws.write('2') // 一点 ws.end() // 写入

管道是 Unix 的核心思想之一,如果你接触过 Linux 操作系统,那么对下面这个操作就很容易理解。

var fs = require('fs')
var rs = fs.createReadStream('a.txt') // 输出流
var ws = fs.createWriteStream('b.txt') // 输入流
rs.pipe(ws) // 输出通过管道流向输入
 上面做的工作,是读取 a.txt 的内容,写入到 b.txt
 在 Linux 中它有一个名字,叫做 “重定向”