【发布时间】:2012-11-05 23:53:03
【问题描述】:
我们有一个使用协议缓冲区来存储应用数据的 Android 应用。数据格式(大致)是单个 protobuf(“容器”),其中包含 protobuf(“items”)列表作为重复字段:
message Container {
repeated Item item = 1;
}
当我们想要保存对某个项目的更改时,我们必须重新创建 protobuf 容器,将所有项目添加到其中,然后将其序列化并写入文件。
这种方法的问题是它可能会在保存时使用三倍内存,因为数据必须首先从模型类复制到 protobuf 构建器,然后在 protobuf 序列化时复制到字节数组,所有这些都在写入之前输出到文件流。
我们想要一种方法来创建我们的 protobuf 容器并将其延迟序列化到流中,然后简单地将每个 protobuf 项(从我们的模型数据创建)添加到容器中,该容器将其序列化并将其写入流中,而不是将所有项目保留在内存中,直到我们在内存中创建整个容器。
有没有办法构建一个 protobuf 并将其延迟序列化为流?
如果没有办法正式执行此操作,是否有任何库可以提供帮助?有没有人有任何建议或想法如何以其他方式解决这个问题?可以使这成为可能的替代数据格式或技术(例如 JSON 或包含 protobufs 的 XML)?
【问题讨论】:
-
(编辑我的答案以包括序列化和反序列化)
标签: android xml json model protocol-buffers