我正在尝试从C++和Java中的文件读取/写入多个Protocol Buffers消息.谷歌建议在消息之前写长度前缀,但默认情况下没办法(我可以看到).
但是,2.1.0版中的Java API收到了一组"Delimited"I/O函数,显然可以完成这项工作:
parseDelimitedFrom
mergeDelimitedFrom
writeDelimitedTo
Run Code Online (Sandbox Code Playgroud)
有C++等价物吗?如果没有,那么Java API附加的大小前缀是什么,所以我可以用C++解析这些消息?
这些现在存在于google/protobuf/util/delimited_message_util.hv3.3.0中.
我试图使用Google的Protocol Buffers和boost :: asio在C++中一起破解客户端.
我的问题是我不知道如何将protobuf消息提供给asio.我有的是这个:
// set up *sock - works
PlayerInfo info;
info.set_name(name);
// other stuff
Run Code Online (Sandbox Code Playgroud)
现在我知道以下是错误的,但我会发布它:
size_t request_length = info.ByteSize();
boost::asio::write(*sock, boost::asio::buffer(info, request_length));
Run Code Online (Sandbox Code Playgroud)
我知道我必须以不同的方式将我的信息打包到缓冲区 - 但是如何?
一般来说,我很难搞清楚boost :: asio是如何工作的.有一些教程,但它们通常只包括发送标准数据格式,如ints,它是开箱即用的.我认为我的问题是序列化,但另一方面我了解到protobuf应该为我做这个......现在我很困惑;)
谢谢你的帮助!
- > Daniel Gehriger提供了解决方案,非常感谢!