核心模块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('数据流向成功');
});
因篇幅问题不能全部显示,请点此查看更多更全内容