Ale*_*lls 1 javascript buffer node.js node.js-buffer
假设我在Node.js中有一个简单的缓冲区,如下所示:
const bytes = Buffer.from('abcdefg');
Run Code Online (Sandbox Code Playgroud)
这个缓冲区实例有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
}
Run Code Online (Sandbox Code Playgroud)
这就是我所拥有的,但它对我来说似乎很"错误",即使它似乎也有效:
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));
Run Code Online (Sandbox Code Playgroud)
有一个更好的方法吗?
另外,我不确定读取是否是正确的单词,但pop会意味着一个数组...使用描述这个函数的功能是什么?
San*_*eer 10
Buffer类的实例类似于整数数组,但对应于V8堆外部的固定大小的原始内存分配.Buffer的大小在创建时建立,无法调整大小.
这就是为什么没有.pop()方法,Buffer因为它不是一个固定大小的操作,不像数组.这同样适用于shift和splice.您无法扩展已分配Buffer但可以创建新分配.
使用.slice()不会给你一个新的Buffer,而是返回原始占用的内存的子集Buffer.虽然这种方法有效,但是有可能某些其他变量仍然引用原始数据,Buffer在这种情况下,对您获得的子集所做的修改.slice()也可以转移到原始变量Buffer.
鉴于Buffer您似乎想要的操作的性质和类型,最好先转换items为字符串.然后,您可以通过拆分使用来执行您提到的所有操作.split('').完成后,您可以加入拆分字符串并创建一个新的Buffer使用Buffer.from(string)并将其分配回去items.这样,您的代码将更加清晰.
| 归档时间: |
|
| 查看次数: |
1481 次 |
| 最近记录: |