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

Javascript 从缓冲区中删除多个字节的规范方法,javascript,node.js,buffer,node.js-buffer,Javascript,Node.js,Buffer,Node.js Buffer,假设Node.js中有一个简单的缓冲区,如下所示: const bytes = Buffer.from('abcdefg'); 这个缓冲区实例有slice和concat作为方法,但我真的不知道如何使用它们来基本上创建数组的pop/shift/splice功能 以下是缓冲区文档: 我基本上希望做的是读取/删除前X个字节,如下所示: function read(x){ // return the first x number of bytes from buffer // and remove

假设Node.js中有一个简单的缓冲区,如下所示:

const bytes = Buffer.from('abcdefg');
这个缓冲区实例有slice和concat作为方法,但我真的不知道如何使用它们来基本上创建数组的pop/shift/splice功能

以下是缓冲区文档:

我基本上希望做的是读取/删除前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));
有更好的方法吗

另外,我不确定read是否是正确的单词,但pop将意味着一个数组…什么是正确的单词来使用描述此函数的功能?

来自:

Buffer类的实例类似于整数数组,但对应于V8堆之外的固定大小的原始内存分配。缓冲区的大小是在创建时确定的,无法调整大小

这就是为什么Buffer没有.pop方法,因为它不是一个用于固定大小的操作,而不像数组。移位和拼接也是如此。不能扩展已分配的缓冲区,但可以创建新的缓冲区

使用.slice不会提供新的缓冲区,而是返回原始缓冲区占用的内存子集。虽然这种方法可行,但也可能有其他变量仍然引用原始缓冲区,在这种情况下,对从.slice获得的子集所做的修改也可能会转移到原始缓冲区

考虑到缓冲区的性质和您想要的操作类型,最好首先将项转换为字符串。然后可以通过使用.split进行拆分来执行您提到的所有操作。完成后,可以加入拆分字符串,并使用Buffer.fromstring创建新缓冲区,然后将其分配回项。这样,您的代码将更加清晰。

来自:

Buffer类的实例类似于整数数组,但对应于V8堆之外的固定大小的原始内存分配。缓冲区的大小是在创建时确定的,无法调整大小

这就是为什么Buffer没有.pop方法,因为它不是一个用于固定大小的操作,而不像数组。移位和拼接也是如此。不能扩展已分配的缓冲区,但可以创建新的缓冲区

使用.slice不会提供新的缓冲区,而是返回原始缓冲区占用的内存子集。虽然这种方法可行,但也可能有其他变量仍然引用原始缓冲区,在这种情况下,对从.slice获得的子集所做的修改也可能会转移到原始缓冲区

考虑到缓冲区的性质和您想要的操作类型,最好首先将项转换为字符串。然后可以通过使用.split进行拆分来执行您提到的所有操作。完成后,可以加入拆分字符串,并使用Buffer.fromstring创建新缓冲区,然后将其分配回项。这样,您的代码将更加清晰