3
我是Protocol Buffers的新手,并认为这是一个很好的方法。 我创建了一个proto文件,并使用编译器生成了Java bean。协议缓冲区文件?
使用此Java Beans,我初始化该对象,并尝试将其写入文件。 目的只是为了看看文件有多大。 我目前没有准备好客户机/服务器测试,可以通过HTTP进行测试。 我只是试图展示我的团队在这一点上,请求/响应如何使用协议缓冲区。
代码,我是这样的:
===原型文件===
Profile {
optional string name=1
optional string id=2
message DocGuids {
required string docguids=3
}
repeated DocGuids docguids=4
}
===示例代码===
ProfileRequest.Builder profile = ProfileRequest.newBuilder();
profile.setName("John");
profile.setId("123");
for (int i=0;i<10;i++) {
ProfileRequest.DocGuids.Builder docGuids = ProfileRequest.DocGuids.newBuilder();
docGuids.setDocguid(GUID.guid());
profile.addDocguids(docGuids);
}
//write to disk
try {
// Write the new address book back to disk.
FileOutputStream output = new FileOutputStream("c:\\testProto.txt");
DataOutputStream dos = new DataOutputStream(output);
dos.write(profile.build().toByteArray());
dos.close();
output.close();
} catch (Exception e) {
}
当我检查testProto .txt,我看到该文件被写为文本文件,而不是二进制文件,尽管我使用toByteArray。
任何人都可以帮忙吗?
感谢
顺便说一句,这是阅读本文件的代码:
// Read from disk
FileInputStream input = new FileInputStream("c:\\testProto.txt");
DataInputStream dis = new DataInputStream(input);
profileBuild.mergeFrom(dis);
dis.close();
input.close()
我能够读取对象,并获得价值就好了,但只是想知道如果是这样的正确的做法呢?
这里是输出中:! 123John# i0ad0290e000001296033cf0b540e7ae7# i0ad0290e000001296033cf0b540e7ae8# Alhtough之前和123(和John)之后,就在我的TextPad一些奇怪的字符这我不能复制到这里。 我在想这可能是“制表符”字符 – user373307 2010-06-22 15:11:47
@workrelated:我建议你在十六进制编辑器中查看文件。只是因为一个文件具有可识别的文本并不意味着它是一个文本文件。结合pb格式规范来看看它。 – 2010-06-22 15:19:07
谢谢乔恩。我使用读取该文件的示例代码更新了上述问题。这是一个正确的方法吗? – user373307 2010-06-22 15:23:53