nodejs 的基础模块 Buffer

Buffer 文档

  • Buffer 用于处理二进制数据流
  • 实例类似证书数组,大小固定
  • C++ 代码在 V8 堆外分配物理内存

例子

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

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

// 创建一个长度为 10、且未初始化的 Buffer。
// 这个方法比调用 Buffer.alloc() 更快,
// 但返回的 Buffer 实例可能包含旧数据,
// 因此需要使用 fill() 或 write() 重写。
const buf3 = Buffer.allocUnsafe(10);

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

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

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

Buffer 类的方法

Buffer.alloc

image

Buffer.from

image

image

Buffer.concat

image

buf 实例的方法

buf.length

返回 buf 实例的字节长度

英文字符,一个字母占一个字节

image

中文字符,一个中文字符占3个字节

image

buf.fill

填充 buf 实例。

image

buf.indexOf

搜索位置,返回找到第一个索引值,类似于数组的 indexOf

image

Buffer 处理中文乱码问题

例子

image
const {StringDecoder} = require('string_decoder');

console.log(StringDecoder);

let decoder = new StringDecoder('utf8');

let buf = Buffer.from('中文字符串');

console.log('\n中文乱码问题: \n');

for (let i = 0; i < buf.length; i += 5) {
  let b = Buffer.alloc(5);
  buf.copy(b, 0, i);
  console.log(b.toString());
}   //打印出来乱码

console.log('\n 用 StringDecoder 解决: \n');

for (let i = 0; i < buf.length; i += 5) {
  let b = Buffer.alloc(5);
  buf.copy(b, 0, i);
  console.log(decoder.write(b));
}   //打印出正常的中文字符
image
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • https://nodejs.org/api/documentation.html 工具模块 Assert 测试 ...
    KeKeMars阅读 11,516评论 0 6
  • Buffer是node的核心模块,开发者可以利用它来处理二进制数据,比如文件流的读写、网络请求数据的处理等。 Bu...
    自度君阅读 3,446评论 0 1
  • Node.js Buffer(缓冲区) JavaScript 语言自身只有字符串数据类型,没有二进制数据类型。但在...
    FTOLsXD阅读 3,570评论 0 2
  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 8,610评论 0 4
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 11,853评论 0 17

友情链接更多精彩内容