Protobuf无法解码缓冲区

protobuf.js版本:^ 6.2.1

缓冲

083515604859581840220a0d6048595815bdf426422a0a0d7047595815bdf426

码:

protobuf.load("PulseFlagData.proto", function(err, root) { if (err) { callback(err); } var pulse = root.lookup("PulseFlagData"); callback(null, pulse.decode(parsed_data.payload)); }); 

.proto文件:

 syntax = "proto3"; message PulseFlagSample { required fixed32 timestamp = 1; required uint32 input = 2; required bool flag = 3; } message PulseFlagData { required uint32 config_version = 1; required fixed32 device_time = 2; required PulseFlagSample current = 3; optional PulseFlagSample last_hour = 4; } 

错误:

/home/deck/NetBeansProjects/lora/node_modules/protobufjs/src/reader.js:390 throw indexOutOfRange(this,length); ^

RangeError:在BufferReader.skip(/ home)处的indexOutOfRange(/home/deck/NetBeansProjects/lora/node_modules/protobufjs/src/reader.js:13:12)处的RangeError(本地)处的索引超出范围:23 + 10> 32 /deck/NetBeansProjects/lora/node_modules/protobufjs/src/reader.js:390:19)at BufferReader.ReaderPrototype.skipType(/home/deck/NetBeansProjects/lora/node_modules/protobufjs/src/reader.js:410:18 )在Type._PulseFlagSample $ decode [as decode](eval at eof(/home/deck/NetBeansProjects/lora/node_modules/protobufjs/node_modules/@protobufjs/codegen/index.js:102:25),:19:7)在Type.decode_setup [解码](/主机/解密/NetBeansProjects/lora/node_modules/protobufjs/src/type.js:370:7)在Type._PulseFlagData $解码[作为解码](在eof(/ home / (/ home / deck / NetBeansProjects / lora / node_modules),在Type.decode_setup [as decode / deck()/ deck / NetBeansProjects /lora/node_modules/protobufjs/node_modules/@protobufjs/codegen/index.js:102:25),:16:27 /protobufjs/src/type.js:370:7)在/home/deck/NetBeansProjects/lora/server.js:4 2:50完成(/home/deck/NetBeansProjects/lora/node_modules/protobufjs/src/root.js:84:9)

您的input不是有效的协议缓冲区。

  1. 它似乎被切断中间消息。 最后一个顶级字段是由10个字节组成的长度分隔的字段,但消息仅在9个字节后结束。 因此,至less有一个字节丢失。 如果应该显示其他字段,可能会丢失更多的字节。
  2. 即使消息没有被过早切断,也不会与您正在parsing的types匹配。 该消息似乎有字段:

     uint32 a = 1; fixed32 b = 2; int32 c = 3; SomeMessageType d = 4; SomeMessageType e = 5; 

    这些字段声明不符合您给出的PulseFlagDatatypes。

以下是按字段细分的原始数据:

 08 35 // 1: [u]int32, = 53 15 60485958 // 2: fixed32, = 1615354200 18 40 // 3: [u]int32, = 64 22 0a 0d6048595815bdf42642 // 4: sub-message, length 10 0d 60485958 // 1: fixed32, = 1615354200 15 bdf42642 // 2: fixed32, = 3186894402 2a 0a 0d7047595815bdf426 // 5: sub-message, length 10, incomplete 0d 70475958 // 1: fixed32, = 1883724120 15 bdf426 // 2: fixed32, incomplete