【发布时间】:2015-08-11 22:38:46
【问题描述】:
我正在用 C++ 将多个 protobuf 消息写入一个文件。
int fifoPipe = open("/media/my_pipe", O_WRONLY);
MyModel *model = new MyModel();
// Write to fifo pipe.
model->SerializeToFileDescriptor(fifoPipe);
我读到消息大小是在消息数据之前自动写入文件的。显然情况并非如此:
https://developers.google.com/protocol-buffers/docs/techniques?hl=en
所以在 Java 中应该可以像这样读取消息:
MyModel.parseDelimitedFrom(fileInputStream);
但是这里有问题:
Cannot deserialize protobuf data from C++ in Java
Are there C++ equivalents for the Protocol Buffers delimited I/O functions in Java?
也就是说消息大小必须手动写入。
由于问题有点老,这个程序可能已经改变了。
在 C++ 中编写多条消息并在 Java 中读取这些消息的正确方法是什么?
还要考虑 Java 将如何响应写了一半的消息。理论上它应该在返回之前等待消息大小的数据出现。
【问题讨论】:
-
当我阅读它时,stackoverflow.com/questions/2340730/… 中的 C++ 代码将写入 Java 方法 parseDelimitedFrom 所期望的长度。
-
@JesperSM 这里的解释相同。 tzaman 的回答表明 Java 实现了它,而 C++ 没有。有了谷歌拥有的所有资源,人们不得不想知道为什么会这样。
-
没错,但代码又是由个人而非公司编写的,尤其是开源代码。至少 Kenton Varda 足以发布一个有用的实现。你不会是第一个从 Stackoverflow 复制和粘贴几行代码来完成工作的人...... ;-)
标签: java c++ protocol-buffers