有趣的NodeJS模块 - Buffer

Buffer 作为 nodejs 中重要的概念和功能,为开发者提供了操作二进制的能力。本文记录了几个问题,来加深对 Buffer 的理解和使用:

  • 认识缓冲器
  • 如何申请堆外内存
  • 如何计算字节长度
  • 如何计算字节长度
  • 如何转换字符编码
  • 理解共享内存与拷贝内存

🔍 关注公众号“心谭博客” / 👉 查看原文: xxoo521.com / 欢迎交流和指正

认识 Buffer(缓冲器)

Buffer 是 nodejs 核心 API,它提供我们处理二进制数据流的功能。Buffer 的使用和 ES2017 的 Uint8Array 非常相似,但由于 node 的特性,专门提供了更深入的 api。

Uint8Array 的字面意思就是:8 位无符号整型数组。一个字节是 8bit,而字节的表示也是由两个 16 进制(4bit)的数字组成的。

const buf = Buffer.alloc(1);
console.log(buf); // output: <Buffer 00>

如何申请堆外内存

Buffer 可以跳出 nodejs 对堆内内存大小的限制。nodejs12 提供了 4 种 api 来申请堆外内存:

  • Buffer.from()
  • Buffer.alloc(size[, fill[, encoding]])
  • Buffer.allocUnsafe(size)
  • Buffer.allocUnsafeSlow(size)

Buffer.alloc vs Buffer.allocUnsafe

在申请内存时,可能这片内存之前存储过其他数据。如果不清除原数据,那么会有数据泄漏的安全风险;如果清除原数据,速度上会慢一些。具体用哪种方式,根据实际情况定。

  • Buffer.alloc:申请指定大小的内存,并且清除原数据,默认填充 0
  • Buffer.allocUnsafe:申请指定大小内存,但不清除原数据,速度更快

根据提供的 api,可以手动实现一个alloc

function pollifyAlloc(size, fill = 0
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在 Node.js 中,Buffer 类用于处理二进制数据。Buffer.toString() 方法可以将一个 Buffer 对象转换为字符串。 使用方法如下: ``` const buffer = Buffer.from('hello world', 'utf8'); // 转换为字符串 const str = buffer.toString(); console.log(str); // 输出:'hello world' // 指定转换后字符串的编码格式 const str2 = buffer.toString('utf8'); console.log(str2); // 输出:'hello world' ``` Buffer.toString() 方法接受一个可选的编码参数,用于指定转换后字符串的编码格式。支持的编码格式包括:'ascii'、'utf8'、'utf16le'、'ucs2'、'base64'、'latin1'、'binary'、'hex'。如果不指定编码格式,则默认使用 'utf8'。 注意,如果原始的 Buffer 对象使用的是其它编码格式,则需要在调用 Buffer.toString() 时指定正确的编码格式,否则可能会出现乱码。 ### 回答2: 在Node.js中,Buffer.toString()方法用于将Buffer对象转换为字符串。 Buffer对象是用于处理二进制数据的类。它可以存储和操作二进制数据,例如图片、音频、视频等。Buffer对象是Node.js的核心模块之一。 使用Buffer.toString()方法时,可以通过指定编码格式将Buffer对象转换为字符串。默认情况下,Buffer对象转换为字符串时使用UTF-8编码格式。 下面是使用Buffer.toString()方法的示例: ```javascript // 创建一个包含ASCII字符的Buffer对象 const buffer = Buffer.from('Hello, Node.js'); // 将Buffer对象转换为字符串 const str = buffer.toString(); console.log(str); // 输出:Hello, Node.js // 可以指定编码格式进行转换 const utf16Buffer = Buffer.from('你好,Node.js', 'utf16le'); const utf16Str = utf16Buffer.toString(); console.log(utf16Str); // 输出:你好,Node.js ``` 在以上示例中,我们首先使用Buffer.from()方法创建了一个包含ASCII字符的Buffer对象。然后,通过调用buffer.toString()方法,将Buffer对象转换为字符串并存储在一个变量中。最后使用console.log()方法输出字符串。 需要注意的是,如果Buffer对象存储的是非UTF-8编码格式的数据,需要在toString()方法中指定相应的编码格式。在示例中,我们使用了'utf16le'编码格式将Buffer对象转换为字符串。 总之,Buffer对象的toString()方法是Node.js中一个非常实用的方法,可以将Buffer对象转换为字符串,方便我们处理和操作二进制数据。 ### 回答3: 在Node.js中,Buffer是一种用于处理二进制数据的数据类型。Buffer.toString()方法可以将Buffer对象转换为字符串。 使用Buffer.toString()方法的常见方式是通过指定字符编码来转换Buffer对象为字符串。这可以通过传递一个字符编码作为方法的参数来实现,例如: ```javascript const buffer = Buffer.from('Hello World', 'utf8'); const str = buffer.toString('utf8'); console.log(str); // 输出: Hello World ``` 在上面的示例中,我们首先使用Buffer.from()方法创建一个包含字符串'Hello World'的Buffer对象。然后,我们使用Buffer对象的toString()方法将其转换为字符串,并指定了字符编码为'utf8'。最后,我们将转换后的字符串打印到控制台上。 除了'utf8',Node.js还支持其他一些字符编码,如'utf16le'、'ascii'、'base64'等。可以根据实际情况选择合适的字符编码进行转换。 如果在调用toString()方法时不传递字符编码作为参数,默认会使用'utf8'编码进行转换。因此,可以简化上面的示例代码: ```javascript const buffer = Buffer.from('Hello World'); const str = buffer.toString(); console.log(str); // 输出: Hello World ``` 总之,通过在Buffer对象上调用toString()方法,可以将其转换为字符串,并可以指定字符编码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值