【发布时间】:2015-04-16 20:25:35
【问题描述】:
我有一个文件“test.txt”,其中包含每行用testMessage.writeDelimitedTo(the-DataOutputStream-that uses a new FileOutputStream pointing to the file) 编写的多个protobuf“TestMessage”消息。如何读取 test.txt 的每一行并取回每行的 protobuf?
在包含字符串的文件上使用缓冲读取器,我会这样做:
String strLine; // What is the alternative to String?
while ((strLine = br.readLine()) != null) {
System.out.println (strLine);
TestMessage test = new TestMessage.builder();
test.parseDelimitedFrom(strLine);
}
如果我要执行此方法,我应该将类型设置为什么而不是“String”?这可能吗?
或者我可以不这样做并且每个消息都必须写入单独的文件吗?
注意:假设 TestMessage 是唯一的消息。
【问题讨论】:
-
您需要使用 Java Protocol Buffers API。它不是文本文件,您不应该尝试逐行阅读。
-
所以你说如果我有 10 条消息我想保存在一个文件中以供以后阅读,我应该使用单独的文件来代替吗?
-
@Rolando 不一定。正如我在回答中所描述的,您可以为文件中存储的每个对象创建自己的标头。如果您没有时间或没有意愿创建自己的标题,那么可以。您必须为每个对象使用单独的文件。
-
那么如果我在 protobuf 消息上使用“writeDelimitedTo”,我如何找出要存储的长度?还是我不应该一开始就使用 writeDelimitedTo 函数?
-
此外,您必须拥有并使用实际消息结构的匹配协议定义:没有这个,就没有真正的方法来访问编码数据。您不一定需要使用生成的 Java 对象(取决于库),但任何读取 protobuf 编码数据的东西都需要基于 protoc 定义。
标签: java protocol-buffers