我们正在考虑使用 Protocol Buffers 进行二进制日志记录,因为:
- 无论如何,这就是我们编码对象的方式
- 它相对紧凑,读/写速度快等。
也就是说,我们应该如何去做并不明显,因为 API 倾向于专注于创建整个对象,因此将 DataLogEntry 列表包装为 DataLogFile 中的重复字段将是您在消息传递方面所做的事情,但是我们真正想要的只是能够写入然后读取整个 DataLogEntry,将其附加到文件的末尾。
我们这样做遇到的第一个问题是这样做(在测试中:
FileInputStream fileIn = new FileInputStream(logFile);
CodedInputStream in = CodedInputStream.newInstance(fileIn);
while(!in.isAtEnd()) {
DataLogEntry entry = DataLogEntry.parseFrom(in);
// ... do stuff
}
只会导致从流中读取 1 个 DataLogEntry。没有 isAtEnd,它永远不会停止。
想法?
编辑:我已经切换到使用 entry.writeDelimitedTo 和 BidLogEntry.parseDelimitedFrom ,这似乎工作......