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'));

 

posted @ 2022-11-28 14:23  吴飞ff  阅读(370)  评论(0编辑  收藏  举报