nodejs中buffer 和 stream
nodeJS 中的 buffer(缓冲区):https://juejin.cn/post/7056337343304695839
JavaScript 语言没有二进制数据类型,如果需要处理tcp流、视频、音频必须使用buffer来处理二进制数据;
所以, buffer 可以理解为存储 二进制数据的 存储对象。类似 array、object这样的 存储对象。
// 创建一个大小为10的空buffer // 这个buffer只能承载10个字节的内容 const buf1 = Buffer.alloc(10); // <Buffer 00 00 00 00 00 00 00 00 00 00> // 根据内容直接创建buffer const buf2 = Buffer.from("hello buffer");
作用:buffer 存储的是二进制的数据,我们对数据的操作就可以基于二进制内容进行操作了。因为有很多文件都是二进制存储的,通过buffer就可以对这样的文件进行操作了。比如,读写 word文件 等。
nodeJs 中的 stream(流):https://juejin.cn/post/6844903638326853646
流可以理解为,就是一个过程。读取一个文件,可以 一次性把它全部读取到内存中;也可以分成一段一段,读取完一段,再读取下一段。这样一个过程就是一个流的过程。
总结就是: 一次性 读写的事,通过流可以变成分段读写。可以更好的利用内存。
let readStream=fs.createReadStream('read.txt'); let writeStream=fs.createWriteStream('write.txt'); readStream.on('data',function (chunk) { //当有数据流入时,就写入数据 writeStream.write(chunk); }); readStream.on('end',function (chunk) { //没有数据写入,关闭写入流,读取流默认设置是读取完成自动关闭 writeStream.end(); })
当然,上面的实现还有些问题,那就是如果读取的速度大于写入的速度,很可能导致数据的丢失,因此,我们可以用流的一个方法pipe
,顾名思义就是管道,它可以控制数据传输速度,让流写完一段数据再读取下一段。如下:
fs.createReadStream('read.txt').pipe(fs.createWriteStream('write.txt'));