我想检查原型(prototype)缓冲区是否是我使用的最佳串行器,我的研究发现没有其他事情可以接近了。
我正在开发Java后端和android(java)移动应用程序,但是有可能在不久的将来创建其他客户端,因此我需要跨平台的东西。
数据结构初稿:
message All {
repeated Line lines = 1;
Common common = 2;
}
有数百个Line对象,每个Line对象都非常复杂,它自己需要约100 kB的空间。
我在原型(prototype)缓冲区中看到的两个问题
-在应用程序启动时,我只需要一部分可用数据-只需“公用”和“行”中的基本信息即可。是否可以加载部分数据?
-每个Line对象包含数百个字符串,但是同一字符串出现在多个Line对象中,因此我想尝试在这些对象之间共享它们。在proto buf级别上是否可能,还是需要成为应用程序级别的一部分?
谢谢!
最佳答案
根据您给出的有限规范,很难给出适当的反馈。您说过,对于您的问题,最好的解决方案似乎是protobuf,但是我们无法根据所提供的信息重新评估该问题。
根据您所写的内容,我什至会说,一个简单的GZIPped字节数组(或JSON,因为大多数都是可打印的(您说它们是String
))可能对您更好(在Line对象上“重复使用”很多东西= > GZIP会摇滚)。
并且正如其他人所述:使用protobuf不可能加载“部分数据结构”(实际上,您不会成为部分数据结构,只要“重复”部分是Collection
,因为protobuf会负责分割您的部分数据结构)数据本身)。
我会在GZIPped JSON流(例如,使用Jackson)上投入2美分,当然,在这种情况下,您将减少带宽并降低CPU周期的成本。