当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《从缓冲区中删除多个字节的规范方法》经验,为你挑选了1个好方法。

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

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

这个缓冲区实例有sliceconcat作为方法,但我真的不知道如何使用这些来基本上创建数组的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会意味着一个数组...使用描述这个函数的功能是什么?



1> Sangeeth Sud..:

从Node.js API:

Buffer类的实例类似于整数数组,但对应于V8堆外部的固定大小的原始内存分配.Buffer的大小在创建时建立,无法调整大小.

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

使用.slice()不会给你一个新的Buffer,而是返回原始占用的内存的子集Buffer.虽然这种方法有效,但是有可能某些其他变量仍然引用原始数据,Buffer在这种情况下,对您获得的子集所做的修改.slice()也可以转移到原始变量Buffer.

鉴于Buffer您似乎想要的操作的性质和类型,最好先转换items为字符串.然后,您可以通过拆分使用来执行您提到的所有操作.split('').完成后,您可以加入拆分字符串并创建一个新的Buffer使用Buffer.from(string)并将其分配回去items.这样,您的代码将更加清晰.

推荐阅读
夏晶阳--艺术
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有