核心模块Buffer和Stream

一、剖析Buffer缓冲区


1. Buffer定义

  • Buffer是内存区域,固定大小的内存块(无法调整大小),可以将 buffer 视为数组,每个元素代表一个数据字节,由Node中Buffer类实现

2. Buffer的数据形式

  • 保存在Buffer中的数据是以十六进制的形式展示的,更加简短,但是计算机底层处理的还是二进制数据
const buf = Buffer.from('青青子衿,悠悠我心');
console.log(buf);

在这里插入图片描述

在这里插入图片描述

//内存的单位
1bit 1位
8bit = 1byte  1字节
1024byte = 1kb
1024kb = 1mb
1024mb = 1gb
1024gb = 1tb

3. 为什么需要Buffer?

  • 帮助开发者处理二进制数据,传统上数组只处理字符串而不是二进制数据图片和音视频
  • 当对文件的IO操作时,输出的速度大于输入的速度,则会将数据存入Buffer中
    在这里插入图片描述

二、Buffer的使用


1. Buffer.from(str)

  • 将字符串转成buffer
const buf1 = Buffer.from('hello world');
const buf2 = Buffer.from('小滴课堂');
console.log(buf1);
console.log(buf2);

在这里插入图片描述

2. Buffer.alloc(size)

  • 创建一个指定大小的buffer,无法调整大小
//创建空的buffer内存
const buf = Buffer.alloc(10);
console.log(buf);

3. Buffer.allocUnsafe(size)

  • 在buffer池中使用原有的buffer,可能含有敏感数据,但是性能会更好
const buf = Buffer.allocUnsafe(11);
console.log(buf);

4. buf.toString()

  • 将buffer转成字符串
//buffer数据转成字符串
const buf = Buffer.from('青青子衿,悠悠我心');
console.log(buf);
const str = buf.toString();
console.log(str);

在这里插入图片描述

三、深入理解Stream


1. Stream

  • 是一种以高效的方式处理读/写文件 io、网络通信、或任何类型的端到端的信息交换
  • 在传统的方式中,读取文件时,会将文件从头到尾读入内存(buffer),然后进行处理
  • 使用流,则可以逐个片段地读取并处理(而无需全部保存在内存中)
    在这里插入图片描述
    在这里插入图片描述

2. Stream的使用

  • 创建可读流: createReadStream
  • 创建可写流: createWriteStream
const fs = require('fs');
const path = require('path');

//创建一个可读流
const flow1 = fs.createReadStream(path.join(__dirname, '/a.txt'));

//创建一个可写流
const flow2 = fs.createWriteStream(path.join(__dirname, '/b.txt'));

flow1.pipe(flow2);

flow1.on('end', () => {
    
    
  console.log('数据流向成功');
});

猜你喜欢

转载自blog.csdn.net/m0_58190023/article/details/129752524