藤县建设局网站,wordpress免费单页主题,软件工程35岁就失业吗,站长工具爱情岛Buffer数据类型 文章目录 Buffer数据类型什么是Buffer数据类型Buffer 的特点 创建Buffer实例Buffer用于编码转换将Buffer 实例转换为JSON 对象Buffer实例基本操作1. 写入Buffer实例#xff1a;2. 从Buffer实例读取数据#xff1a;3. Buffer实例合并#xff1a; 4. Buffer实例…Buffer数据类型 文章目录 Buffer数据类型什么是Buffer数据类型Buffer 的特点 创建Buffer实例Buffer用于编码转换将Buffer 实例转换为JSON 对象Buffer实例基本操作1. 写入Buffer实例2. 从Buffer实例读取数据3. Buffer实例合并 4. Buffer实例复制5. Buffer实例切片 什么是Buffer数据类型
Buffer 是 Node.js 中用于处理二进制数据的数据类型可以将其视为一种缓冲区或缓冲器。它类似于整数数组但是在创建时分配了固定大小的原始内存并且大小无法更改。
Buffer 的特点
Buffer 的特点包括
固定大小Buffer 实例在创建时需要指定大小且无法更改。这使得 Buffer 在处理二进制数据时更加高效。原始内存分配Buffer 实例在内存中分配了原始的二进制数据存储空间可以直接对其进行读取和写入操作。全局作用域Buffer 类位于全局作用域中因此无需使用 require() 加载即可直接使用。
通过使用 BufferNode.js 可以处理 TCP 流、文件系统操作以及其他需要与二进制字节流进行交互的场景。Buffer 提供了一系列方法和属性用于读取、写入和操作二进制数据使得在 Node.js 中处理二进制数据变得更加方便和高效。 总结起来Buffer 是 Node.js 中用于处理二进制数据的数据类型具有固定大小、原始内存分配和全局作用域的特点。它是处理 TCP 流、文件系统操作等二进制数据交互的重要工具。 创建Buffer实例
在 Node.js 6.0.0 之前的版本中Buffer 实例是使用Buffer 构造函数创建的。之后的版本中Buffer 实例创建改为
Buffer.from()Buffer.alloc()Buffer.allocUnsafe()
// 创建一个包含数组[0x1, 0x2, 0x3]的Buffer实例
const buf1 Buffer.from([1, 2, 3]);
// 创建一个包含 UTF-8 字节 [0x74, 0xc3, 0xa9, 0x73, 0x74] 的 Buffer实例
const buf2 Buffer.from(tést);
// 创建一个包含 Latin-1说明见2.6.2节字节 [0x74, 0xe9, 0x73, 0x74] 的 Buffer实例
const buf3 Buffer.from(tést, latin1);
// 创建一个长度为 10、且用零填充的 Buffer实例
const buf4 Buffer.alloc(10);
// 创建一个长度为 10、且用 0x1 填充的 Buffer实例
const buf5 Buffer.alloc(10, 1);
/* 创建一个长度为 10、且未初始化的 Buffer实例。这个方法比调用 Buffer.alloc()更快
但返回的 Buffer 实例可能包含旧数据因此需要使用 fill() 或 write() 重写。*/
const buf6 Buffer.allocUnsafe(10);Buffer用于编码转换
这里先介绍一下字符集(Charset)和字符编码(Encoding)这两个概念。文字内容在计算机中的存储格式实际是二进制的字节流这两者之间的转换需要一个统一的标准就是各种字符集标准其规定了每个字符与二进制数字存储方式(编码》的转换关系。字符集只是一个规则集合的名称而字符集要正确编码转码一个字符还需要字库表、编码字符集和字符编码的支持。
字库表决定整个字符集能够表示的字符的范围。编码字符集则用一个编码值来表示一个字符在字库中的位置。字符编码确定编码字符集和实际存储数值之间的转换关系。例如Unicode 是编码字符集而UTF-8、UTF-16 就是字符编码即符合 Unicode 规则的字库的一种实现形式。
Buffer 实例一般用于表示编码字符的序列如UTF-8、UCS2、Base64 或十六进制编码的数据在文件操作和网络操作中如果没有显式声明编码格式返回数据的默认类型为 Buffer。例如读取文件时不指定编码格式得到的结果就是 Buffer 字符串。通过使用显式的字符编码就可以将 Buffer 实例与普通的JavaScript 字符串进行相互转换。
Node.is 目前支持的字符编码如下。
ascii: 仅适用于7位ASCI 数据。此编码速度很快如果设置这种编码将从数据中删除高位。utf8:多字节编码的 Unicode 字符。许多网页和文档都使用这种编码格式。utf16le: 2 个或4 个字节小字节序编码的 Unicode 字符。支持代理对(U10000 至U10FFFF)。ucs2 是它的别名base64: Base6 编码。latin1:一种将 Buffer编码成单字节编码字符串的方法。binary 是latin1的别名hex: 将每个字节编码成两个十六进制的字符。
在创建Buffer实例时指定存入字符串的字符编码const buf Buffer.from(hello world, ascii);
将已创建的Buffer实例转换成字符串的语法 : buf.toString([encoding[, start[, end]]]) toString方法根据参数encoding指定的字符编码将 buf对象解码成字符串。其中参数encoding 指定所用的字符编码默认值为ut8:stat 指定开始解码的字节偏移量默认值为0;end 指定结束解码的字节偏移量默认值为 buf.ength。返回的结果是字符串。下面是一个简单的例子:
const buf Buffer.from(tést);
console.log(buf.toString(hex));// 输出结果: 74c3a97374
console.log(buf.toString(utf8, 0, 3));//输出结果té将Buffer 实例转换为JSON 对象
可以使用buftoJSON0方法将 Buffer 实例转换为JSON 对象这种用法适用于将二进制数据转换为JSON 格式。当一个Buffer 实例字符串化时JSON.stringifv0会隐式地调用tOJSON0方法该方法返回一个JSON对象。下面的例子示范如何将 Buffer 实例转换为JSON对象。
【示例Buffer 对象转JSON 对象(buf to_ison.js)】
const buf Buffer.from([0x1, 0x2, 0x3, 0x4, 0x5]);
const json JSON.stringify(buf);
console.log(json); // 输出{type:Buffer,data:[1,2,3,4,5]}
const copy JSON.parse(json, (key, value) {return value value.type Buffer ?Buffer.from(value.data) :value;
});
console.log(copy); // 输出 Buffer 01 02 03 04 05Buffer实例基本操作
Buffer是Node.js中用于处理二进制数据的类。以下是Buffer的常用操作
写入 Buffer 实例从 Buffer 实例读取数据Buffer 实例合并Buffer 实例复制Buffer 实例切片
1. 写入Buffer实例
可以使用Buffer.from()或Buffer.alloc()方法创建一个Buffer实例并使用write()方法向Buffer中写入数据。
const buf Buffer.alloc(5); // 创建一个长度为5的Buffer实例
buf.write(hello); // 向Buffer实例写入数据2. 从Buffer实例读取数据
可以使用toString()方法将Buffer实例中的数据转换为字符串。
const buf Buffer.from(hello); // 创建一个包含字符串的Buffer实例
const str buf.toString(); // 将Buffer实例中的数据转换为字符串
console.log(str); // 输出: hello3. Buffer实例合并
可以使用Buffer.concat()方法将多个Buffer实例合并成一个。
const buf1 Buffer.from(hello);
const buf2 Buffer.from(world);
const mergedBuf Buffer.concat([buf1, buf2]); // 合并两个Buffer实例
console.log(mergedBuf.toString()); // 输出: helloworld4. Buffer实例复制
可以使用copy()方法将一个Buffer实例的数据复制到另一个Buffer实例中。
const buf1 Buffer.from(hello);
const buf2 Buffer.alloc(5);
buf1.copy(buf2); // 将buf1的数据复制到buf2中
console.log(buf2.toString()); // 输出: hello5. Buffer实例切片
可以使用slice()方法从一个Buffer实例中创建一个新的Buffer实例包含原始Buffer实例的指定部分数据。
const buf Buffer.from(hello world);
const slicedBuf buf.slice(6, 11); // 从第6个字节到第11个字节创建一个新的Buffer实例
console.log(slicedBuf.toString()); // 输出: world这些是Buffer的一些常用操作可以帮助你处理二进制数据。在实际开发中还有更多的Buffer操作可以探索和应用。