首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >protobufjs中抛出异常“非法缓冲区”

protobufjs中抛出异常“非法缓冲区”
EN

Stack Overflow用户
提问于 2020-08-16 00:18:18
回答 1查看 797关注 0票数 1

我使用protobufjs通过API管理我的数据。它在大多数情况下都工作得很好,但在一条消息的一个实例中,我得到了一个“非法缓冲区”异常。这是由库中的一些内部代码抛出的。我在这里粘贴Chrome调试器的视觉,而停止在一个断点se到抛出语句。Chromer debugger output

正如你所看到的,Chrome告诉我缓冲区确实是一个Uint8Array ( 755字节)。为什么if语句解析为false并导致throw语句执行?"buffer instanceof Uint8Array“和"Array.isArray(buffer)”都为真。

更新

我写了一些代码(必要地从protobufjs复制并简化了它):

代码语言:javascript
复制
function test() {
    var data = new Uint8Array([10, 9, 18, 7, 99, 111, 110, 110, 101, 99, 116, 16, 1]);
    testProtobuf(data);
}

function Reader(buffer) {
    this.buf = buffer;
    this.pos = 0;
    this.len = buffer.length;
}

var create_array = function (buffer) {
    console.log(buffer);
    if (buffer instanceof Uint8Array || Array.isArray(buffer))
        return new Reader(buffer);
    throw Error("illegal buffer");
}

function testProtobuf (data) {
    try {
        create_array(data);
    }
    catch (e) { console.log('Exception')};
}

当我调用test() (它调用testProtobuf,而后者又调用create_array )时,没有抛出异常。我还在实际代码中从我的onmessage方法调用testProtobuf。在这种情况下,仍会抛出异常。如您所见,我在控制台上记录了缓冲区。两个日志是相同的(我确保测试数据是相同的)。

这是Chrome控制台:Console output in Chrome

EN

回答 1

Stack Overflow用户

发布于 2021-07-05 23:03:40

我找到了这个问题的解决方案here

代码语言:javascript
复制
Sample.deserializeBinary(Array.from(buffer));

下面是我的typescript代码中的一个例子:

代码语言:javascript
复制
const arrayBuffer = await res.arrayBuffer();
const array = new Uint8Array(arrayBuffer);
const response: Uint8Array = (Array.from(array) as unknown) as Uint8Array;
rpcImplCallback(null, response);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63428242

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档