nodejs-Buffer模块

Buffer模块

目录

  • Buffer简介
  • Buffer.from(), Buffer.alloc(), Buffer.allocUnsafe()
  • Buffer与字符编码
  • Buffer 类方法

Buffer简介

Buffer类用于在TCP流或者文件系统操作等场景中处理二进制数据流。
与之相同的有TypedArray,已被添加进ES6中。

Buffer类的实例类似于整数数组,但Buffer的大小是固定的、且在V8堆外分配物理内存。Buffer的大小在被创建时确定,且大小无法调整。Buffer在Node.js中是一个全局变量。

const buff1 = Buffer.alloc(10);
// 创建一个长度为10、且用0填充的Buffer

const buff2 = Buffer.alloc(10, 1);
// 创建一个长度为10、且用0x1填充的Buffer

const buff3 = Buffer.from([1, 2, 3]);
// 创建一个包含 [0x1, 0x2, 0x3] 的Buffer

const buff4 = Buffer.from('tést');
// 创建一个包含 UTF-8 字节 [0x74, 0xc3, 0xa9, 0x73, 0x74] 的 Buffer

const buff5 = Buffer.from('tést', 'latin1');
// 创建一个包含 Latin-1 字节 [0x74, 0xe9, 0x73, 0x74] 的 Buffer

Buffer.from(), Buffer.alloc(), Buffer.allocUnsafe()

  • Buffer.from(array)
    返回一个新建的包含所提供的字节数组的副本的Buffer。

  • Buffer.from(buffer)
    返回一个新建的包含所提供的Buffer的内容的副本的Buffer。

  • Buffer.alloc(size[, fill[, encoding]])
    返回一个指定大小的被填满的Buffer实例。这个方法创建的实例不会包含旧的和潜在的敏感数据。

Buffer 与 字符编码

Buffer实例一般用于表示编码字符的序列,比如UTF-8、UCS2、Base64、或十六进制编码的数据。通过使用显示的字符编码,就可以在Buffer实例与普通的JavaScript字符串之间进行相互转换。

例:

const buff = Buffer.from('hello world', 'ascii');

//输出 68656c6c6f20776f726c64
console.log(buff.toString('hex'));

// 输出 aGVsbG8gd29ybGQ=
console.log(buff.toString('base64'));

Node.js 目前支持的字符编码:

  • ascii - 仅支持7位ASCII数据。
  • utf8 - 多字节编码的Unicode字符,许多网页和其他文档格式都使用UTF-8。
  • utf16le - 2或4个字节,小字节序编码的Unicode字符。
  • ucs2 - utf16le的别名。
  • base64 - Base64编码
  • latin1 - 一种把Buffer编码成一字节编码的字符串的方式。
  • binary - lantin1的别名。
  • hex - 将每个字节编码为两个十六进制字符。

Buffer 类方法

Buffer.alloc(size[, fill[, encoding]])
  • size Buffer长度
  • fill 初始化值。默认为0
  • encoding 字符编码。默认为 utf8
Buffer.allocUnsafe(size)
  • size Buffer长度
    该方法创建的Buffer内存是未初始化的。
Buffer.byteLength(string[, encoding])
  • string 要计算长度的值
  • encoding 指定字符编码。默认为 utf8
Buffer.compare(buf1, buf2)
  • buf1, buf2 要比较的两个buffer对象。
Buffer.concat(list[, totalLength])
  • list 需合并的Buffer数组
  • totalLength 合并后的总长度,大于此长度会截断
Buffer.from(arrayBuffer[, byteOffset[, length]])
  • arrayBuffer ArrayBuffer 或 SharedArrayBuffer,或 TypedArray 的 .buffer 属性。
  • byteOffset 开始拷贝的索引。
  • length 拷贝的字节数。
Buffer.isBuffer(obj)

判断是否为Buffer

Buffer.isEncoding(encoding)

判断是否为支持的字符编码

Buffer.poolSize

指定预分配的Buffer池的大小(字节为单位)。

buf.buffer

Buffer底层的ArrayBuffer对象

buf.byteOffset

Buffer底层的ArrayBuffer对象的byteOffset

buf.compare(target[, targetStart[, targetEnd[, sourceStart[, sourceEnd]]]])

对比buf和target,0表示相同,1表示target排在前面,-1表示target排在后面

buf.copy(target[, targetStart[, sourceStart[, sourceEnd]]])

拷贝 buf 中某个区域的数据到 target 中的某个区域,即使 target 的内存区域与 buf 的重叠

buf.entries()

用 buf 的内容创建并返回一个 [index, byte] 形式的迭代器

buf.equals(otherBuffer)

如果buf和otherBuffer具有完全相同的字节,则返回true,否则返回false。

buf.fill(value[, offset[, end]][, encoding])

用指定的 value 填充 buf。 如果没有指定 offset 与 end,则填充整个 buf

buf.includes(value[, byteOffset][, encoding])

查找value是否存在

buf.indexOf(value[, byteOffset][, encoding])

存在返回首次出现的索引,不存在返回-1

buf.keys()

创建并返回 buf 键名(索引)的迭代器。

buf.lastIndexOf(value[, byteOffset][, encoding])

存在返回最后出现的索引,不存在返回-1

buf.length

返回内存中分配给 buf 的字节数。 不一定反映 buf 中可用数据的字节量。

buf.slice([start[, end]])

创建一个指向与原始 Buffer 同一内存的新 Buffer,但使用 start 和 end 进行了裁剪。

buf.toJSON()

返回buf的JSON格式

buf.toString([encoding[, start[, end]]])

根据 encoding 指定的字符编码将 buf 解码成字符串。

buf.values()

创建并返回 buf 键值(字节)的迭代器。 当对 Buffer 使用 for…of 时会调用该函数。

buf.write(string[, offset[, length]][, encoding])

根据 encoding 指定的字符编码将 string 写入到 buf 中的 offset 位置。 如果 buf 没有足够的空间保存整个字符串,则只会写入 string 的一部分。

Buffer 常量
  • buffer.constants.MAX_LENGTH 单个Buffer实例允许的最大内存
  • buffer.constants.MAX_STRING_LENGTH 单个Buffer实例允许的最大长度
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值