如何读取缓冲区的前 n 个字节并在 NodeJS 中转换为字符串?
How to read first n bytes of buffer and convert to string in NodeJS?
我有一个字符串通过网络发送并作为缓冲区到达我的服务器。它已经格式化为我自己的自定义协议(理论上,还没有实现)。我想将前 n 个字节用于标识协议的字符串。
我完成了:
data.toString('utf8');
在整个缓冲区上,但这只是给我整个数据包作为一个字符串,这不是我想要实现的。
收到消息后,如何将字节的子集转换为字符串?
提前致谢
找到方法了。
您必须通过在原始缓冲区上调用复制方法将所需的字节数复制到另一个缓冲区,即:
sourceBuffer.copy(targetBuffer, targetStartIndex, sourceStartIndex, sourceEndIndex)
这将为您的 targetBuffer 提供所需的数据,然后您可以调用 toString() 或任何其他方法将缓冲区数组转换为所需的数据类型。
Buffer.toString()
方法接受 start
和 end
参数,您可以使用它们来切出您想要的子字符串子集。根据您的实施情况,这可能比您在回答中建议的分配新中介 Buffer
更快。
查看 Node 的 Buffer.toString()
方法以获取更多信息。
我知道我有点晚了,但为什么不只是这样:
buffer.subarray(0, bytes).toString();
我有一个字符串通过网络发送并作为缓冲区到达我的服务器。它已经格式化为我自己的自定义协议(理论上,还没有实现)。我想将前 n 个字节用于标识协议的字符串。
我完成了:
data.toString('utf8');
在整个缓冲区上,但这只是给我整个数据包作为一个字符串,这不是我想要实现的。
收到消息后,如何将字节的子集转换为字符串?
提前致谢
找到方法了。
您必须通过在原始缓冲区上调用复制方法将所需的字节数复制到另一个缓冲区,即:
sourceBuffer.copy(targetBuffer, targetStartIndex, sourceStartIndex, sourceEndIndex)
这将为您的 targetBuffer 提供所需的数据,然后您可以调用 toString() 或任何其他方法将缓冲区数组转换为所需的数据类型。
Buffer.toString()
方法接受 start
和 end
参数,您可以使用它们来切出您想要的子字符串子集。根据您的实施情况,这可能比您在回答中建议的分配新中介 Buffer
更快。
查看 Node 的 Buffer.toString()
方法以获取更多信息。
我知道我有点晚了,但为什么不只是这样:
buffer.subarray(0, bytes).toString();