node.js - 在 Node 中解析ByteBuffer?

标签 node.js bytebuffer

我有来自 api 的数据,返回如下:

var body = data;

数据等于:

ByteBuffer {
    buffer:
         <Buffer 09 62 61 1f 04 01 00 10 01 11 61 99 5d 05 01 00 10 01>,
    offset: 0,
    markedOffset: -1,
    limit: 18,
    littleEndian: true,
    noAssert: false
}

我尝试向它传递不同的函数以尝试从中获取数据。 (我预计至少有 2 个 ID。)以下是我到目前为止所尝试过的方法及其结果:

var message = body.readUint32(); // 526475785
var message = body.readCString(); // [blank]
var message = body.readUint8(); // 16
var message = body.readUint64(); // Long { low: -1721691903, high: 66909, unsigned: true }

我也尝试过:

var message = new ByteBuffer(8 + 8 + 4 + Buffer.byteLength(body.buffer) + 1, ByteBuffer.LITTLE_ENDIAN);

返回:

ByteBuffer {
    buffer:
    <Buffer 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00>,
    offset: 0,
    markedOffset: -1,
    limit: 39,
    littleEndian: true,
    noAssert: false
}

我也尝试过只传递“body”,但这根本不起作用。我应该以不同的方式解析这个吗?我到底应该改变什么来获取数据?谢谢

最佳答案

您必须首先翻转字节缓冲区以使ByteBuffer准备好进行读取操作。

缓冲区准备好进行读取操作后,使用 readIString 将整个缓冲区作为字符串读取,如果您希望得到以下结果,可以使用其他操作,例如 readInt32 buffer 的值不是字符串(我假设是字符串,因为它来自 API)。

body.flip().readIString();

ByteBuffer 文档的链接: https://github.com/dcodeIO/bytebuffer.js/wiki/API

关于node.js - 在 Node 中解析ByteBuffer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51577244/

相关文章:

java - android 截击超时错误

java - 关于何时应该将直接缓冲区与 Java NIO 一起用于网络 I/O 的简单规则?

pointers - 如何将字符串解析为int

Java direct ByteBuffer - 解码字符

java - Java 中的 ByteBuffer 到 String

node.js - 如何让多个 Node.js 命令行进程相互通信?

javascript - 延迟延迟javascript循环

javascript - Node 使用 ObjectionJS 和 Knex,一对多,从多表中返回第一个相关行

node.js - 如何使用 Node js中的方法获取所有js文件操作

java - Java 中的十六进制字节