规范的方式从缓冲区中删除多个字节

假设我在Node.js中有一个简单的Buffer,如下所示:

const bytes = Buffer.from('abcdefg'); 

这个缓冲区实例有sliceconcat作为方法,但我真的不知道如何使用这些基本上创buildpopup/移位/拼接数组的function。

这里是缓冲区文档: 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 } 

这里是我所拥有的,但对我来说这似乎是相当“错误的”,尽pipe它似乎也起作用:

 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)); 

有一个更好的方法吗?

另外,我不确定如果阅读是正确的话,但stream行将意味着一个数组…什么是正确的词用来描述这个function呢?

从Node.js API :

Buffer类的实例类似于整数数组,但对应于V8堆外的固定大小的原始内存分配。 缓冲区的大小在创build时build立,不能resize。

这就是为什么Buffer没有.pop()方法的原因,因为它不像数组那样是一个固定大小的操作。 shiftsplice 。 您不能扩展已分配的Buffer但可以创build新的Buffer

使用.slice()将不会给你一个新的Buffer ,而是返回原始Buffer占用的内存的一个子集。 虽然这种方法可行,但其他一些variables仍然可能引用原始的Buffer在这种情况下,对从.slice()获得的子集所做的修改也可能会传递给原始的Buffer

鉴于Buffer的性质和您所期望的操作types,最好先将items转换为string。 然后,您可以使用.split('')执行所有您提到的操作。 一旦你完成,你可以join拆分string,并使用Buffer.from(string)创build一个新的Buffer并将其分配回items 。 这样,你的代码将更清晰。