Node.js -- Buffer(缓冲区)类

Buffer

JavaScript 语言自身只有字符串数据类型,没有二进制数据类型。
但在处理像TCP流或文件流时,必须使用到二进制数据。因此在 Node.js中,定义了一个 Buffer 类,该类用来创建一个专门存放二进制数据的缓存区。

1.Buffer解释
  • 在 Node.js 中,Buffer 类是随 Node 内核一起发布的核心库。成员都是0-255的整数值,即一个8位字节
  • Buffer 库为 Node.js 带来了一种存储原始数据的方法, Node.js 处理二进制数据的一个接口,是一个构造函数
  • 当需要在 Node.js 中处理I/O操作中移动的数据时,就有可能使用 Buffer 库。
  • 一个 Buffer 类似于一个整数数组,但它对应于 V8 堆内存之外的一块原始内存。
2.Buffer支持的字符编码格式
编码格式 解释
ascii 仅支持 7 位 ASCII 数据。如果设置去掉高位的话,这种编码是非常快的。
utf8 多字节编码的 Unicode 字符。许多网页和其他文档格式都使用 UTF-8 。
utf16le( ucs2) 2 或 4 个字节,小字节序编码的 Unicode 字符。
base64 Base64 编码。
latin1( binary) 一种把 Buffer 编码成一字节编码的字符串的方式。
hex 将每个字节编码为两个十六进制字符。
3.TypeArray

TypeArray对象 :通用的固定长度缓冲区类型,允许读取缓冲区中的二进制数据。

类型 大小 描述 Web IDL类型 C 类型
Int8Array 1 8位有符号整数 byte signed char
Uint8Array 1 8位无符号整数 octet unsigned char
Uint8ClampedArray 1 8位无符号整数 (clamped) octet unsigned char
Int16Array 2 16位有符号整数 short short
Uint16Array 2 16位无符号整数 unsigned short unsigned short
Int32Array 4 32位有符号整数 long int
Uint32Array 4 32位无符号整数 unsigned long unsigned int
Float32Array 4 32位IEEE浮点数 unrestricted float float
Float64Array 8 64位IEEE浮点数 unrestricted double double

Buffer类基于Unit8Array,占一个字节

4.创建Buffer类(举例)
  1. 申请一个 10 个单元的缓冲区:
    const buf1=Buffer.alloc(10); 每个单元都用0来填充
    const buf2=Buffer.alloc(10,5)每个单元都用5来填充
  2. 创建包含[1,2,3]的缓冲区:
    const buf3 = Buffer.from([1, 2, 3]);
  3. 构造函数:
    var hello=new Buffer([0x48,0x65,0x6c,0x6c,0x6f]) =>hello
5.Buffer类的方法
  1. buf.write() :写入缓冲区
buf = Buffer.alloc(256);
len = buf.write("www.runoob.com");

console.log("写入字节数 : "+  len);
//结果为:14
//返回的是实际写入的大小
  1. buf.toString():从缓冲区读取数据
// 使用 'utf8' 编码, 并输出: abcde
console.log( buf.toString('utf8',0,5));    
  1. buf.toJSON():将Buffer转换为JSON对象
const buf = Buffer.from([0x1, 0x2, 0x3, 0x4, 0x5]);

//当字符串化一个 Buffer 实例时,JSON.stringify() 会隐式地调用该 toJSON()。
const json = JSON.stringify(buf);

// 输出: {"type":"Buffer","data":[1,2,3,4,5]}
console.log(json);
  1. buf.compare(otherBuffer);:缓冲区比较
var result = buffer1.compare(buffer2);
  1. buf.copy():拷贝缓冲区
var buf1 = Buffer.from('abcdefghijkl');
var buf2 = Buffer.from('RUNOOB');

//将 buf2 插入到 buf1 指定位置上
buf2.copy(buf1, 2);
  1. buf.slice():缓冲区剪裁
var buffer1 = Buffer.from('runoob');
// 剪切缓冲区
var buffer2 = buffer1.slice(0,2);
  1. buf.length :返回缓冲区长度
var buffer = Buffer.from('www.runoob.com');
//  缓冲区长度
console.log("buffer length: " + buffer.length);
//结果为:14
  1. Buffer.concat():合并缓冲区(可指定长度)
var buffer3 = Buffer.concat([buffer1,buffer2]);

猜你喜欢

转载自blog.csdn.net/isfor_you/article/details/113943043