当我尝试使用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);
答案 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());