protobuf解码中的非法组结束指示符错误

时间:2015-11-11 19:42:38

标签: javascript protocol-buffers

当我尝试使用protobuf.js解码解码bytearray时出现以下错误

错误:Message .SampleMessage的非法组结束指示符:1749(不是组)     在错误(本机)     在ProtoBuf.Reflect.MessagePrototype.decode(http://127.0.0.1:53259/libs/protobuf/dist/ProtoBuf.js:3168:31)     在Function.Message.decode(http://127.0.0.1:53259/libs/protobuf/dist/ProtoBuf.js:2896:37

代码段 sample.proto - file

message SampleMessage {
    required string text = 1;
}

Java代码用于编码:

 SampleMessage msg = SampleProto.SampleMessage.newBuilder().setText("test data ").build();
 ObjectOutputStream out = new ObjectOutputStream(response.getOutputStream());
 out.writeObject(msg);
 out.flush();

使用javascript解码:

var ProtoBuf = dcodeIO.ProtoBuf;
var SampleMessage = ProtoBuf.loadProtoFile("com/cm/model/sample.proto").build("SampleMessage");  
var msg = SampleMessage.decode(response.data);

1 个答案:

答案 0 :(得分:1)

我强烈怀疑这是问题所在:

ObjectOutputStream out = new ObjectOutputStream(response.getOutputStream());
out.writeObject(msg);

您为什么使用ObjectOutputStream?这是针对Java的本机二进制序列化协议,与协议缓冲区不同。尽管protobuf已经某些支持Java的序列化(如果你已经在使用内置序列化,你仍然可以序列化protobuf消息)你不应该使用它,除非你使用两个侧的Java序列化。

您应该使用

SampleMessage msg = SampleProto.SampleMessage.newBuilder().setText("test data ").build();
msg.writeTo(response.getOutputStream());