我们有一个使用协议缓冲区来存储应用程序数据的 Android 应用程序。数据格式(大致)是单个 protobuf(“容器”),其中包含 protobuf(“items”)列表作为重复字段:
message Container {
repeated Item item = 1;
}
当我们想要保存对项目的更改时,我们必须重新创建 protobuf 容器,将所有项目添加到其中,然后将其序列化并将其写入文件。
这种方法的问题在于,它可能会使保存时使用的内存增加三倍,因为数据必须首先从模型类复制到 protobuf 构建器,然后在序列化 protobuf 时复制到字节数组,所有这些都在将其写入之前文件流。
我们想要一种方法来创建我们的 protobuf 容器并将其延迟序列化到流中,然后简单地将每个 protobuf 项(从我们的模型数据创建)添加到容器中,该容器将其序列化并将其写入流中,而不是保留所有内存中的项目,直到我们在内存中创建了整个容器。
有没有办法构建一个 protobuf 并将其延迟序列化为流?
如果没有办法正式做到这一点,是否有任何图书馆可以提供帮助?有没有人有任何建议或想法如何以其他方式解决这个问题?使这成为可能的替代数据格式或技术(例如 JSON 或包含 protobufs 的 XML)?