我正在使用Java Protobuf序列化程序将大量(小)消息写入二进制文件。我使用writeDelimitedTo()函数编写长度前缀成帧的消息。不幸的是,其中一条消息(位于文件中间)仅被部分写入。这会弄乱整个文件,因为解析器无法恢复该中断消息之后的消息开头和结尾。有办法解决这个问题吗?
为避免该问题再次出现,我愿意离开Protobuf。是否有更健壮的替代方法适合此类任务(将许多消息写入单个文件)?我正在寻找Java中良好支持的东西,其反序列化速度与Protobuf相似。
谢谢!
编辑:在读取损坏的消息之后的消息时,我收到许多(数百万)以下错误(看似随机):
com.google.protobuf.InvalidProtocolBufferException:协议消息端组标记与预期标记不匹配。
com.google.protobuf.InvalidProtocolBufferException:解析协议消息时,输入在字段中间意外结束。这可能意味着输入已被截断,或者嵌入的消息错误地报告了其自身的长度。
我不一定希望恢复损坏的消息本身。