我目前在我的一个Android应用程序中使用有线协议缓冲区,看起来它的parseFrom()方法效率不高,因为它甚至需要大约10毫秒来解析非常少量的数据。
所以我遇到了这个:https://capnproto.org/index.html
有谁知道这两个协议缓冲区之间的主要区别是什么,主要是在性能和功能方面?
答案 0 :(得分:4)
"有线协议缓冲器"只是Protocol Buffers的另一个实现。 Cap' n Proto是一种完全不同的,不兼容的格式。 Cap&n Proto网站上有大量文字说明它与Protocol Buffers的不同之处。 Cap&#cu; n Proto的主要问题在于它不是成熟的或广泛使用的。
如果您发现protobuf解析器需要10毫秒来解析少量数据,那么很可能会出现其他问题。通常,它应该能够在那段时间内解析大约一兆字节或更多。
答案 1 :(得分:0)
对我来说,问题是每次解析消息时都会创建Wire实例。
// Sample code
Wire wireObj = new Wire(<extension>);
output = wireObj.parseFrom(<buffer>, <extension>);
事实证明,如果每次需要解析消息时创建一个Wire实例,那么这很费时间。但是,如果您只创建一次并将其重用于所有其他解析请求,则需要的时间非常短(<1ms)。
编辑:
注意:虽然解析第一个请求仍需要稍长的时间。