NodeJS Buffer

发布于 2024-04-18 23:14:21 字数 1234 浏览 29 评论 0

Buffer 是 Node.js 中用于处理二进制数据的类,其中与 IO 相关的操作 (网络/文件等) 均基于 Buffer,Buffer 类的实例非常类似整数数组,但其大小是固定不变的,并且其内存在 V8 堆栈外分配原始内存空间。Buffer 类的实例创建之后, 其所占用的内存大小就不能再进行调整。

在 Node.js v6.x 之后 new Buffer() 接口开始被废弃,理由是参数类型不同会返回不同类型的 Buffer 对象,所以当开发者没有正确校验参数或没有正确初始化 Buffer 对象的内容时,以及不了解的情况下初始化 就会在不经意间向代码中引入安全性和可靠性问题。

接口用途
Buffer.from()根据已有数据生成一个 Buffer 对象
Buffer.alloc()创建一个初始化后的 Buffer 对象
Buffer.allocUnsafe()创建一个未初始化的 Buffer 对象

TypedArray

Node.js 的 Buffer 在 ES6 增加了 TypedArray 类型之后,修改了原来的 Buffer 的实现,选择基于 TypedArray 中 Uint8Array 来实现,从而提升了一波性能。

使用上, 你需要了解如下情况:

const arr = new Uint16Array(2);
arr[0] = 5000;
arr[1] = 4000;

const buf1 = Buffer.from(arr); // 拷贝了该 buffer
const buf2 = Buffer.from(arr.buffer); // 与该数组共享了内存

console.log(buf1);
// 输出: <Buffer 88 a0>, 拷贝的 buffer 只有两个元素
console.log(buf2);
// 输出: <Buffer 88 13 a0 0f>

arr[1] = 6000;
console.log(buf1);
// 输出: <Buffer 88 a0>
console.log(buf2);
// 输出: <Buffer 88 13 70 17>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

平生欢

暂无简介

0 文章
0 评论
591 人气
更多

推荐作者

qq_E2Iff7

文章 0 评论 0

Archangel

文章 0 评论 0

freedog

文章 0 评论 0

Hunk

文章 0 评论 0

18819270189

文章 0 评论 0

wenkai

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文