node随笔-二进制数组buffer

Posted 小旺0808

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了node随笔-二进制数组buffer相关的知识,希望对你有一定的参考价值。

Buffer简介

在 ECMAScript 2015 (ES6) 引入 TypedArray 之前,javascript 语言没有读取或操作二进制数据流的机制。 Buffer 类被引入作为 Node.js API 的一部分,使其可以在 TCP 流或文件系统操作等场景中处理二进制数据流。

TypedArray 现已被添加进 ES6 中,Buffer 类以一种更优化、更适合 Node.js 用例的方式实现了 Uint8Array API。

Buffer 类的实例类似于整数数组,但 Buffer 的大小是固定的、且在 V8 堆外分配物理内存。 Buffer 的大小在被创建时确定,且无法调整。

Buffer 类在 Node.js 中是一个全局变量,因此无需使用 require(‘buffer‘).BufferBuffer 中元素为16进制的Number类型,大小为8b

Buffer常用的方法

Buffer.from()  将字符串转换为buffer数据

Buffer.alloc(10) 创建一个指定长度为10的buffer数据,改方法在创建内存空间的时候,同时将数据清空。

Buffer.allocUnsafe(10) 创建一个指定长度为10的buffer数据,改方法在创建内存空间的时候,内存空间中的数据没有清空,可能含有敏感数据。

Buffer.byteLength(string[, encoding]) 返回string在内存中分配字节长度

Buffer.isBuffer(buf) 判断buf是否为Buffer对象

 

buf.buffer

buffer 属性指向创建该 Buffer 的底层的 ArrayBuffer 对象。

const arrayBuffer = new ArrayBuffer(16);
const buffer = Buffer.from(arrayBuffer);

console.log(buffer.buffer === arrayBuffer);
// 输出: true

buf.equals(otherBuffer) buf 与 otherBuffer 具有完全相同的字节,则返回 true,否则返回 false

例子:

const buf1 = Buffer.from(‘ABC‘);
const buf2 = Buffer.from(‘414243‘, ‘hex‘);
const buf3 = Buffer.from(‘ABCD‘);

// 输出: true
console.log(buf1.equals(buf2));

// 输出: false
console.log(buf1.equals(buf3));

buf.fill(value[, offset[, end]][, encoding]) 该方法与Array.fill()类似

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

  • value <string> | <Buffer> | <integer> 要搜索的值
  • byteOffset <integer> buf 中开始搜索的位置。默认: 0
  • encoding <string> 如果 value 是一个字符串,则这是它的字符编码。 默认: ‘utf8‘
  • 返回: <boolean> 如果 buf 找到 value,则返回 true,否则返回 false

相当于 buf.indexOf() !== -1

例子:

const buf = Buffer.from(‘this is a buffer‘);

// 输出: true
console.log(buf.includes(‘this‘));

// 输出: true
console.log(buf.includes(‘is‘));

// 输出: true
console.log(buf.includes(Buffer.from(‘a buffer‘)));

// 输出: true
// (97 是 ‘a‘ 的十进制 ASCII 值)
console.log(buf.includes(97));

// 输出: false
console.log(buf.includes(Buffer.from(‘a buffer example‘)));

// 输出: true
console.log(buf.includes(Buffer.from(‘a buffer example‘).slice(0, 8)));

// 输出: false
console.log(buf.includes(‘this‘, 4));
 

Buffer与字符编码

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

例子:

const buf = Buffer.from(‘hello world‘, ‘ascii‘);

// 输出 68656c6c6f20776f726c64
console.log(buf.toString(‘hex‘));

// 输出 aGVsbG8gd29ybGQ=
console.log(buf.toString(‘base64‘));

 



以上是关于node随笔-二进制数组buffer的主要内容,如果未能解决你的问题,请参考以下文章

Node.js之Buffer

Node.js——Buffer

Node.js—Buffer对象

node.js中Buffer缓冲器的使用

node.jsBuffer(缓冲区)

Buffer 知识点