[TOC] <br/><br/><br/> # <b style="color:#4F4F4F;">简介说明</b> 原文链接: - [buffer](https://github.com/nodejs/node/blob/main/doc/api/buffer.md) ``` 版本:buffer 作用:Buffer 类是一个全局变量,用于直接处理二进制数据 ``` <br/> # <b style="color:#4F4F4F;">buffer</b> <br/> # <span style="color:#619BE4">*INSPECT_MAX_BYTES</span> ***** 返回当调用 buf.inspect() 时将会返回的最大字节数 <br/> # <span style="color:#619BE4">*kMaxLength</span> ***** 分配给单个 Buffer 实例的最大内存 <br/> # <span style="color:#619BE4">*transcode()</span> ***** 将指定的 Buffer 或 Uint8Array 实例从一个字符编码重新编码到另一个字符 <br/> ### 参数说明 <b style="color:#808080;">source :</b> * 类型:对象 * 默认值:无 * 描述:一个 Buffer 或 Uint8Array 实例 * 可选值:[ ] <b style="color:#808080;">fromEnc :</b> * 类型:整型 * 默认值:0 * 描述:当前字符编码 * 可选值:[ ] <b style="color:#808080;">toEnc :</b> * 类型:整型 * 默认值:0 * 描述:目标字符编码 * 可选值:[ ] <br/> # <b style="color:#4F4F4F;">buffer.constants </b> <br/> # <span style="color:#619BE4">*MAX_LENGTH</span> ***** 在 32 位的架构上,该值是 (2^30)-1 (~1GB)。 在 64 位的架构上,该值是 (2^31)-1 (~2GB)。 <br/> # <span style="color:#619BE4">*MAX_STRING_LENGTH</span> ***** 表示 string 原始数据类型能有的最大 length,以 UTF-16 代码为单位 <br/> # <b style="color:#4F4F4F;">buffer.Blob</b> <br/> # <span style="color:#619BE4">[new]-Blob()</span> ***** 封装了可以在多个工作线程之间安全共享的不可变原始数据 <br/> # <b style="color:#4F4F4F;">buffer.Buffer</b> <br/> # <span style="color:#619BE4">*poolSize</span> ***** 这是用于缓冲池的预分配的内部 Buffer 实例的大小(以字节为单位)。 该值可以修改 <br/> # <span style="color:#619BE4">byteOffset</span> ***** 偏移量 <br/> # <span style="color:#619BE4">length</span> ***** buffer对象大小 <br/> # <span style="color:#619BE4">*alloc()</span> ***** 创建指定大小,并且使用0填充的buffer <br/> ### 参数说明 <b style="color:#808080;">size:</b> * 类型:整型 * 默认值:无 * 描述:指定大小 * 可选值:[ ] <b style="color:#808080;">fill:</b> * 类型:十六进制 * 默认值:无 * 描述:string | Buffer | Uint8Array | integer 用于预填充新 Buffer 的值。默认值: 0 * 可选值:[ ] <b style="color:#808080;">encoding:</b> * 类型:字符串 * 默认值:utf8 * 描述:如果 fill 是一个字符串,则这是它的字符编码 * 可选值:[ ] <br/> # <span style="color:#619BE4">*allocUnsafe()</span> ***** 创建速度快,但是可能包含旧数据 <br/> ### 参数说明 <b style="color:#808080;">size:</b> * 类型:整型 * 默认值:无 * 描述:指定大小 * 可选值:[ ] <br/> # <span style="color:#619BE4">*allocUnsafeSlow()</span> ***** 只用作开发人员已经在其应用程序中观察到过度的内存之后的最后手段 <br/> ### 参数说明 <b style="color:#808080;">size:</b> * 类型:整型 * 默认值:无 * 描述:指定大小 * 可选值:[ ] <br/> # <span style="color:#619BE4">*from()</span> ***** 创建一个包含 [数组中指定内容] 的 Buffer,使用八位字节数组 array 分配一个新的 Buffer。 <br/> ### 参数说明 <b style="color:#808080;">obj:</b> * 类型:对象 * 默认值:无 * 描述:批量指定内容,可以是数组或字符串 * 可选值:[ ] <b style="color:#808080;">encoding:</b> * 类型:字符串 * 默认值:无 * 描述:指定编码 * 可选值:[ ascii | utf8 | utf16le | ucs2 | base64 | latin1 | binary | hex ] <br/> # <span style="color:#619BE4">*byteLength()</span> ***** 返回字符串的实际字节长度。 与 String.prototype.length 不同,后者返回字符串的字符数 <br/> ### 参数说明 <b style="color:#808080;">string:</b> * 类型:对象 * 默认值:无 * 描述:批量指定内容,可以是数组或字符串 * 可选值:[ string | buffer | typedArray | DataView | ArrayBuffer | SharedArrayBuffer ] <b style="color:#808080;">encoding:</b> * 类型:字符串 * 默认值:无 * 描述:指定编码 * 可选值:[ ascii | utf8 | utf16le | ucs2 | base64 | latin1 | binary | hex ] <br/> # <span style="color:#619BE4">*compare()</span> ***** 比较 buf1 与 buf2,主要用于 Buffer 实例数组的排序 <br/> ### 参数说明 <b style="color:#808080;">buf1:</b> * 类型:Buffer * 默认值:无 * 描述:用于比较的buffer * 可选值:[ ] <b style="color:#808080;">buf1:</b> * 类型:Buffer * 默认值:无 * 描述:用于比较的buffer * 可选值:[ ] <br/> ### 示例内容 <span style="color:red;">1. 举例说明</span> ``` const buf1 = Buffer.from('1234'); const buf2 = Buffer.from('0123'); const arr = [buf1, buf2]; console.log(arr.sort(Buffer.compare)); // 打印: [ <Buffer 30 31 32 33>, <Buffer 31 32 33 34> ] // (结果相当于: [buf2, buf1]) ``` <br/> # <span style="color:#619BE4">*concat()</span> ***** 返回一个合并了 list 中所有 Buffer 实例的新 Buffer <br/> ### 示例内容 <span style="color:red;">1. 举例说明</span> ``` // 用含有三个 `Buffer` 实例的数组创建一个单一的 `Buffer`。 const buf1 = Buffer.alloc(10); const buf2 = Buffer.alloc(14); const buf3 = Buffer.alloc(18); const totalLength = buf1.length + buf2.length + buf3.length; console.log(totalLength); // 打印: 42 const bufA = Buffer.concat([buf1, buf2, buf3], totalLength); console.log(bufA); // 打印: <Buffer 00 00 00 00 ...> console.log(bufA.length); // 打印: 42 ``` <br/> # <span style="color:#619BE4">*isBuffer()</span> ***** 如果 obj 是一个 Buffer,则返回 true,否则返回 false <br/> # <span style="color:#619BE4">*isEncoding()</span> ***** 如果 encoding 是支持的字符编码,则返回 true,否则返回 false。 <br/> # <span style="color:#619BE4">write()</span> ***** 根据 encoding 指定的字符编码将 string 写入到 buf 中的 offset 位置 <br/> ### 参数说明 <b style="color:#808080;">string :</b> * 类型:对象 * 默认值:无 * 描述:要写入 buf 的字符串 * 可选值:[ ] <b style="color:#808080;">offset :</b> * 类型:整型 * 默认值:0 * 描述:开始写入 string 之前要跳过的字节数 * 可选值:[ ] <b style="color:#808080;">length :</b> * 类型:整型 * 默认值:0 * 描述:要写入的字节数 * 可选值:[ ] <b style="color:#808080;">encoding :</b> * 类型:整型 * 默认值:buf.length * 描述:string 的字符编码 * 可选值:[ ] <br/> ### 示例内容 <span style="color:red;">1. 举例说明</span> ``` const buf = Buffer.alloc(256); const len = buf.write('\u00bd + \u00bc = \u00be', 0); console.log(`${len} 个字节: ${buf.toString('utf8', 0, len)}`); // 打印: 12 个字节: ½ + ¼ = ¾ ``` <br/> # <span style="color:#619BE4">writeBigInt64BE()</span> ***** 用指定的字节序格式 写入大端序 <br/> # <span style="color:#619BE4">writeBigInt64LE()</span> ***** 用指定的字节序格式 写入小端序 <br/> # <span style="color:#619BE4">writeBigUInt64BE()</span> ***** 用指定的字节序格式 写入大端序 <br/> # <span style="color:#619BE4">writeBigUInt64LE()</span> ***** 用指定的字节序格式 写入小端序 <br/> # <span style="color:#619BE4">writeDoubleBE()</span> ***** 用指定的字节序格式 写入大端序 <br/> # <span style="color:#619BE4">writeBigInt64LE()</span> ***** 用指定的字节序格式 写入小端序 <br/> # <span style="color:#619BE4">writeDoubleLE()</span> ***** 用指定的字节序格式 写入大端序 <br/> # <span style="color:#619BE4">writeFloatBE()</span> ***** 用指定的字节序格式 写入小端序 <br/> # <span style="color:#619BE4">writeFloatLE()</span> ***** 用指定的字节序格式 写入大端序 <br/> # <span style="color:#619BE4">writeInt8()</span> ***** 用指定的字节序格式 写入小端序 <br/> # <span style="color:#619BE4">writeInt16BE()</span> ***** 用指定的字节序格式 写入大端序 <br/> # <span style="color:#619BE4">writeInt16LE()</span> ***** 用指定的字节序格式 写入小端序 <br/> # <span style="color:#619BE4">writeInt32BE()</span> ***** 用指定的字节序格式 写入大端序 <br/> # <span style="color:#619BE4">writeInt32LE()</span> ***** 用指定的字节序格式 写入小端序 <br/> # <span style="color:#619BE4">writeIntBE()</span> ***** 用指定的字节序格式 写入大端序 <br/> # <span style="color:#619BE4">writeIntLE()</span> ***** 用指定的字节序格式 写入小端序 <br/> # <span style="color:#619BE4">writeUInt8()</span> ***** 用指定的字节序格式 写入大端序 <br/> # <span style="color:#619BE4">writeUInt16BE()</span> ***** 用指定的字节序格式 写入小端序 <br/> # <span style="color:#619BE4">writeUInt16LE()</span> ***** 用指定的字节序格式 写入小端序 <br/> # <span style="color:#619BE4">writeUInt32BE()</span> ***** 用指定的字节序格式 写入小端序 <br/> # <span style="color:#619BE4">writeUInt32LE()</span> ***** 用指定的字节序格式 写入小端序 <br/> # <span style="color:#619BE4">writeUIntBE()</span> ***** 用指定的字节序格式 写入小端序 <br/> # <span style="color:#619BE4">writeUIntLE()</span> ***** 用指定的字节序格式 写入小端序 <br/> # <span style="color:#619BE4">readBigInt64BE()</span> ***** 返回BigInt64大端序 <br/> # <span style="color:#619BE4">readBigInt64LE()</span> ***** 返回BigInt64小端序 <br/> # <span style="color:#619BE4">readBigUInt64BE()</span> ***** readBigUInt64BE <br/> # <span style="color:#619BE4">readBigUInt64LE()</span> ***** readBigUInt64LE <br/> # <span style="color:#619BE4">readDoubleBE()</span> ***** readDoubleBE <br/> # <span style="color:#619BE4">readDoubleLE()</span> ***** readDoubleLE <br/> # <span style="color:#619BE4">readFloatBE()</span> ***** readFloatBE <br/> # <span style="color:#619BE4">readFloatLE()</span> ***** readFloatLE <br/> # <span style="color:#619BE4">readInt8()</span> ***** readInt8 <br/> # <span style="color:#619BE4">readInt16BE()</span> ***** readInt16BE <br/> # <span style="color:#619BE4">readInt16LE()</span> ***** readInt16LE <br/> # <span style="color:#619BE4">readInt32BE()</span> ***** readInt32BE <br/> # <span style="color:#619BE4">readInt32LE()</span> ***** readInt32LE <br/> # <span style="color:#619BE4">readIntBE()</span> ***** readIntBE <br/> # <span style="color:#619BE4">readIntLE()</span> ***** readIntLE <br/> # <span style="color:#619BE4">readUInt8()</span> ***** readUInt8 <br/> # <span style="color:#619BE4">readUInt16BE()</span> ***** readUInt16BE <br/> # <span style="color:#619BE4">readUInt16LE()</span> ***** readUInt16LE <br/> # <span style="color:#619BE4">readUInt32BE()</span> ***** readUInt32BE <br/> # <span style="color:#619BE4">readUInt32LE()</span> ***** readUInt32LE <br/> # <span style="color:#619BE4">readUIntBE()</span> ***** readUIntBE <br/> # <span style="color:#619BE4">readUIntLE()</span> ***** readUIntLE <br/> # <span style="color:#619BE4">copy()</span> ***** 拷贝 buf 中某个区域的数据到 target 中的某个区域,即使 target 的内存区域与 buf 的重叠 <br/> ### 参数说明 <b style="color:#808080;">target :</b> * 类型:对象 * 默认值:无 * 描述:要拷贝进的 Buffer 或 Uint8Array * 可选值:[ ] <b style="color:#808080;">targetStart:</b> * 类型:整型 * 默认值:0 * 描述:target 中开始写入之前要跳过的字节数 * 可选值:[ ] <b style="color:#808080;">sourceStart :</b> * 类型:整型 * 默认值:0 * 描述:buf 中开始拷贝的偏移量 * 可选值:[ ] <b style="color:#808080;">sourceEnd :</b> * 类型:整型 * 默认值:buf.length * 描述:buf 中结束拷贝的偏移量(不包含) * 可选值:[ ] <br/> ### 示例内容 <span style="color:red;">1. 举例说明</span> ``` // 创建两个 `Buffer` 实例。 const buf1 = Buffer.allocUnsafe(26); const buf2 = Buffer.allocUnsafe(26).fill('!'); for (let i = 0; i < 26; i++) { // 97 是 'a' 的十进制 ASCII 值。 buf1[i] = i + 97; } // 拷贝 `buf1` 中第 16 至 19 字节偏移量的数据到 `buf2` 第 8 字节偏移量开始。 buf1.copy(buf2, 8, 16, 20); console.log(buf2.toString('ascii', 0, 25)); // 打印: !!!!!!!!qrst!!!!!!!!!!!!! ``` <br/> # <span style="color:#619BE4">entries()</span> ***** 返回一个可迭代对象 <br/> # <span style="color:#619BE4">equals()</span> ***** 与其它buffer比较查看是否相同 <br/> # <span style="color:#619BE4">fill()</span> ***** 用指定的 value 填充 buf。 如果没有指定 offset 与 end,则填充整个 buf <br/> ### 参数说明 <b style="color:#808080;">value :</b> * 类型:对象性 * 默认值:无 * 描述:用于填充的内容 * 可选值:[ ] <b style="color:#808080;">offset :</b> * 类型:整型 * 默认值:无 * 描述:开始填充 buf 的偏移量 * 可选值:[ ] <b style="color:#808080;">end:</b> * 类型:整型 * 默认值:无 * 描述:结束填充 buf 的偏移量(不包含) * 可选值:[ ] <b style="color:#808080;">encoding:</b> * 类型:字符串 * 默认值:utf8 * 描述:如果 value 是一个字符串,则这是它的字符编码 * 可选值:[ ] <br/> # <span style="color:#619BE4">includes()</span> ***** 如果 buf 查找到 value,则返回 true,否则返回 false <br/> # <span style="color:#619BE4">indexOf()</span> ***** 首次出现 value 的索引,如果 buf 没包含 value 则返回 -1 <br/> # <span style="color:#619BE4">values()</span> ***** 建并返回 buf 键值(字节)的迭代器。 <br/> # <span style="color:#619BE4">keys()</span> ***** 创建并返回 buf 键名(索引)的迭代器。 <br/> # <span style="color:#619BE4">lastIndexOf()</span> ***** buf 中最后一次出现 value 的索引,如果 buf 没包含 value 则返回 -1 <br/> # <span style="color:#619BE4">subarray()</span> ***** 一个新的 Buffer,它引用与原始的 Buffer 相同的内存,但是由 start 和 end 索引进行偏移和裁剪 <br/> ### 参数说明 <b style="color:#808080;">start:</b> * 类型:整型 * 默认值:无 * 描述:开始索引 * 可选值:[ ] <b style="color:#808080;">end:</b> * 类型:十六进制 * 默认值:无 * 描述:结束索引 * 可选值:[ ] <br/> # <span style="color:#619BE4">slice()</span> ***** 与subarray相同,此方法与 Uint8Array.prototype.slice() 不兼容,后者是 Buffer 的超类 <br/> ### 参数说明 <b style="color:#808080;">start:</b> * 类型:整型 * 默认值:无 * 描述:开始索引 * 可选值:[ ] <b style="color:#808080;">end:</b> * 类型:十六进制 * 默认值:无 * 描述:结束索引 * 可选值:[ ] <br/> # <span style="color:#619BE4">swap16()</span> ***** 将 buf 解析成无符号的 16 位整数的数组,并且以字节顺序原地进行交换 <br/> ### 示例内容 <span style="color:red;">1. 举例说明</span> ``` const buf1 = Buffer.from([0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8]); console.log(buf1); // 打印: <Buffer 01 02 03 04 05 06 07 08> buf1.swap16(); console.log(buf1); // 打印: <Buffer 02 01 04 03 06 05 08 07> const buf2 = Buffer.from([0x1, 0x2, 0x3]); buf2.swap16(); // 抛出异常 ERR_INVALID_BUFFER_SIZE。 ``` <br/> # <span style="color:#619BE4">swap32()</span> ***** 将 buf 解析成无符号的 32 位整数的数组,并且以字节顺序原地进行交换 <br/> # <span style="color:#619BE4">swap64()</span> ***** 将 buf 解析成无符号的 64 位整数的数组,并且以字节顺序原地进行交换 <br/> # <span style="color:#619BE4">toJSON()</span> ***** 返回 buf 的 JSON 格式 <br/> # <span style="color:#619BE4">toString()</span> ***** 转成字符串可以指定编码base64或hex <br/>