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 字符。
base64Base64 编码。
latin1( binary)一种把 Buffer 编码成一字节编码的字符串的方式。
hex将每个字节编码为两个十六进制字符。
3.TypeArray

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

类型大小描述Web IDL类型C 类型
Int8Array18位有符号整数bytesigned char
Uint8Array18位无符号整数octetunsigned char
Uint8ClampedArray18位无符号整数 (clamped)octetunsigned char
Int16Array216位有符号整数shortshort
Uint16Array216位无符号整数unsigned shortunsigned short
Int32Array432位有符号整数longint
Uint32Array432位无符号整数unsigned longunsigned int
Float32Array432位IEEE浮点数unrestricted floatfloat
Float64Array864位IEEE浮点数unrestricted doubledouble

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]);
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值