规范的方式从缓冲区中删除多个字节
假设我在Node.js中有一个简单的Buffer,如下所示:
const bytes = Buffer.from('abcdefg');
这个缓冲区实例有slice
和concat
作为方法,但我真的不知道如何使用这些基本上创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()
方法的原因,因为它不像数组那样是一个固定大小的操作。 shift
和splice
。 您不能扩展已分配的Buffer
但可以创build新的Buffer
。
使用.slice()
将不会给你一个新的Buffer
,而是返回原始Buffer
占用的内存的一个子集。 虽然这种方法可行,但其他一些variables仍然可能引用原始的Buffer
在这种情况下,对从.slice()
获得的子集所做的修改也可能会传递给原始的Buffer
。
鉴于Buffer
的性质和您所期望的操作types,最好先将items
转换为string。 然后,您可以使用.split('')
执行所有您提到的操作。 一旦你完成,你可以join拆分string,并使用Buffer.from(string)
创build一个新的Buffer
并将其分配回items
。 这样,你的代码将更清晰。