当前位置: 首页 > 知识库问答 >
问题:

线协议缓冲区vs Cap'n原型-哪一个更好?

高山
2023-03-14

我目前正在我的一个android应用程序中使用wire protocol buffers,看起来它的parseFrom()方法不是很有效,因为即使解析非常少量的数据也需要10毫秒。

所以我遇到了这个:https://capnproto.org/index.html

有谁知道这两个协议缓冲区之间的主要区别是什么,主要是在性能和特性方面?

共有2个答案

严繁
2023-03-14

对我来说,问题是每次我解析消息时都要创建Wire实例。

// Sample code 
Wire wireObj = new Wire(<extension>);
output = wireObj.parseFrom(<buffer>, <extension>);

事实证明,如果每次需要解析消息时都创建一个Wire实例,那么这将非常耗时。但是,如果只创建一次,并将其重新用于所有其他解析请求,则所需时间将非常少(

编辑:

注意:但解析第一个请求仍然需要稍长的时间。

姚雅珺
2023-03-14

“有线协议缓冲区”只是协议缓冲区的另一种实现。Cap'n Proto是一种完全不同的、不兼容的格式。Cap'n Proto网站有很多文字解释了它与协议缓冲区的不同之处。Cap'n Proto的主要问题是它没有那么成熟或广泛使用。

如果您发现protobuf解析器需要10毫秒来解析少量数据,那么很可能还有其他问题。通常,在这段时间内,它应该能够解析大约1兆字节或更多的数据。

 类似资料:
  • 我不小心安装了3.0.0版,我的大多数文件自然产生了大量错误。现在我想把它带回2.6.1。我已经下载了2.6.1并安装了,但是当我做时,它仍然显示,这是错误的。 有办法将版本设置为2.6.1还是有办法卸载3.0.0?

  • 试图使用Ionic 4中的协议缓冲区进行编码 我已经下载了协议并用它来生成一堆_pb.js文件,每个. proto文件一个。很好。 首先关注原型示例。这是示例代码: 我做了一些更改以匹配我的文件。更改proto文件的名称。但是我的proto文件中没有包名称。所以我只是使用了消息名称。首先这是我的. proto文件的开头: 下面是我修改后的代码: 这似乎不起作用。我的控制台显示: 我相信我已经成功地

  • 问题内容: 我正在使用gSoap将旧式C 系统重构为SOA。我们遇到了一些性能问题(非常大的XML),因此我的领导要我看一下协议缓冲区。我做到了,它看起来非常酷(我们需要C 和Java支持)。但是协议缓冲区是仅用于序列化的解决方案,现在我需要将其发送到Java前端。从C ++和Java角度来看,我应该使用什么来通过HTTP(只是内部网络)发送那些序列化的内容? PS。另一个人试图加速我们的gSoa

  • 嗨,为了保持向后兼容性,可以更改协议缓冲区中字段的数据类型吗。例如 旧消息 所以基本上我没有更改字段的标签号,也没有重命名它,但我更改了数据类型。那么这是向后兼容的吗?如果一个应用程序获得了一个用以前的模式创建的旧proto对象,它可以通过这个新模式创建的对象进行解析吗?

  • 两者都是序列化库,由谷歌开发人员开发。他们之间有什么大的区别吗?将使用协议缓冲区的代码转换为使用FlatBuffers需要大量工作吗?

  • 在阅读这个相当长的问题之前,我提出了一个bughttps://github.com/GoogleCloudPlatform/python-docs-samples/issues/1103. 原型包和名称解析的留档状态 您可以使用其他定义。通过导入原始文件。导入另一个。在proto的定义中,您可以在文件的顶部添加一条import语句。 我的依赖于annotations.proto将HTTP/JSON