如何在NodeJS中读取缓冲区的前n个字节并转换为字符串?

5
我收到了一个经网络传输并以Buffer形式到达我的服务器的字符串。该字符串已按照我的自定义协议格式化(理论上还没有实现)。我想使用前n个字节来表示标识该协议的字符串。
我已经完成以下步骤:
data.toString('utf8');

我可以在整个缓冲区上操作,但这只会将整个数据包作为字符串返回,这并不是我想要实现的结果。

当接收到消息时,如何将部分字节转换为字符串?

提前感谢您的回复。


1
这不完全是你所问的,所以我不会将其发布为答案...但是如果有人像我一样通过谷歌搜索“nodejs如何读取缓冲区的前n个字节”,到达了这里:缓冲区只是一个字节数组,因此您可以使用简单的数组表示法进行访问。 b [0]是第一个字节,表示为从0到255的无符号整数。 - Kip
3个回答

8
Buffer.toString()方法接受startend参数,您可以使用它们来仅获取所需的子字符串。这可能会比您在答案中建议的分配新的中间Buffer更快,具体取决于您的实现。
请查看Node的Buffer.toString()方法以了解更多信息。

哦,我真是太蠢了。但我想我还是会使用我的方法,因为我为Buffer类创建了一个包装器类,其中包含方法。但谢谢,也许我可以对那个类进行适应以使用Buffer.toString方法。 - Samuel Innocent-Primus Mungy

3
我知道我来晚了,但为什么不尝试这样做呢:
buffer.subarray(0, bytes).toString();

谢谢!我只是想要一个更短的缓冲区,这很完美。 - mikemaccana

2
发现如何操作。
你需要通过调用原始缓冲区上的 copy 方法,将想要的字节数复制到另一个缓冲区中,例如:
sourceBuffer.copy(targetBuffer, targetStartIndex, sourceStartIndex, sourceEndIndex)

这将为你的目标缓冲区提供所需的数据,然后你可以调用toString()或任何其他方法将缓冲区数组转换为所需的数据类型。"最初的回答"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接