在java中通过protobuf codedoutputstream和codedinputstream从套接字进行写入和读取

dgiusagp  于 2021-07-09  发布在  Java
关注(0)|答案(1)|浏览(447)

所以我有一个套接字,我用protobuf codedoutputstream发送一些数据,如下所示:

int size = myMessage.getSerializedBytes();
 out.writeRawVarint32(size) ; // out = CodedOutputStream created from a java.io.OutputStream
 myMessage.writeTo(out);
 out.flush();

客户机代码编译和写入。如何在服务器端正确地阅读这些内容?如果我使用 DataInputStream readbyte()读取大小我得到一个负值的大小。。。如果我使用 CodedInputStream 要通过readrawvarint32读取大小,我得到一个很大的值,是我发送的序列化消息大小的10倍。
如何从java中的inputstream读取protobuf消息?? CodedInputStream ? DataInputStream ?
我看了文件,在任何地方都找不到这个文件。我需要下降到协议级别并开始调试字节吗?

mrphzbgm

mrphzbgm1#

在ide中键入内容时要小心,我在outputstream定义中犯了一个小错误:

OutputStream out = new ObjectOutputStream( client.getOutputStream() );

我正在研究如何序列化protobuf消息。我想一开始我想我应该使用objectoutputstream,添加了它之后就忘了。然后离开它,然后想知道为什么我不能读取protobuf接收端的数据。当我把它修好并使用正确的 OutputStream 通过protobuf方法读取/写入数据,一切都开始工作。

相关问题