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

Illegal group end indicator error in protobuf decode

当我尝试使用 protobuf.js decode

解码 bytearray 时出现以下错误

错误:消息 .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 - 文件

message SampleMessage {
    required string text = 1;
}

Java code For encode:

 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);

我强烈怀疑是这个问题:

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

为什么要使用 ObjectOutputStream?这是 Java 的本机二进制序列化协议, 与 Protocol Buffers 不同。即使 protobuf 一些 支持 Java 的序列化(这样如果你已经在使用内置序列化,你仍然可以序列化 protobuf 消息)你不应该除非你在 both 端使用 Java 序列化,否则不要使用它。

你应该使用

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