假设我在Node.js中有一个简单的缓冲区,如下所示:
const bytes = Buffer.from('abcdefg');
这个缓冲区实例有slice
和concat
作为方法,但我真的不知道如何使用这些来基本上创建数组的pop/shift/splice的功能.
这里是缓冲区文档:https://nodejs.org/api/buffer.html
我基本上要做的是读取/删除前X个字节,如下所示:
function read(x){ // return the first x number of bytes from buffer // and remove those bytes from the buffer // side-effects be damned for the moment }
这就是我所拥有的,但它对我来说似乎很"错误",即使它似乎也有效:
let items = Buffer.from('abcdefg'); function read(x){ const b = items.slice(0,x); items = items.slice(x,items.length); return b; } console.log(String(read(4))); console.log(String(items));
有一个更好的方法吗?
另外,我不确定读取是否是正确的单词,但pop会意味着一个数组...使用描述这个函数的功能是什么?
从Node.js API:
Buffer类的实例类似于整数数组,但对应于V8堆外部的固定大小的原始内存分配.Buffer的大小在创建时建立,无法调整大小.
这就是为什么没有.pop()
方法,Buffer
因为它不是一个固定大小的操作,不像数组.这同样适用于shift
和splice
.您无法扩展已分配Buffer
但可以创建新分配.
使用.slice()
不会给你一个新的Buffer
,而是返回原始占用的内存的子集Buffer
.虽然这种方法有效,但是有可能某些其他变量仍然引用原始数据,Buffer
在这种情况下,对您获得的子集所做的修改.slice()
也可以转移到原始变量Buffer
.
鉴于Buffer
您似乎想要的操作的性质和类型,最好先转换items
为字符串.然后,您可以通过拆分使用来执行您提到的所有操作.split('')
.完成后,您可以加入拆分字符串并创建一个新的Buffer
使用Buffer.from(string)
并将其分配回去items
.这样,您的代码将更加清晰.