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

Apache Thrift:字节和二进制类型之间的差异

郁宾鸿
2023-03-14

我想使用Thrift发送1024字节的数据。它必须正好是1024字节,因为它是与其他框架的比较基准。

Thrift有两种类型来表示字节:“byte”和“binary”,但我不知道如何使用这些类型“binary”类型映射到std::string,这很奇怪(我不明白为什么以及如何使用它)。”字节的类型被映射到一个8位整数,这对我来说似乎更符合逻辑。

要表示1024字节的数据,我使用:list

但是编译警告建议我使用二进制而不是列表

我认为使用“binary”可以获得更好的性能,因为对于1024个字节序列来说,它的速度奇慢。

谢谢你。


共有2个答案

禹昊穹
2023-03-14
匿名用户

这可能取决于您将thrift文件编译到的语言,但二进制直接告诉thrift您确实想要传输一系列原始的未编码字节。

它可能不会在传输层的大小方面改变太多,但当您用所选语言实例化/反序列化对象时,您可能会遇到意外。例如,在Java中,二进制字段将用字节表示,而列表[字节]将为您提供一个列表[字节],而表示同一事物的效率要低得多。

根据thrift文档,Java可能是二进制的唯一原因:

二进制:未编码字节的序列

N、 B:这是目前上述字符串类型的一种特殊形式,是为了提供与Java更好的互操作性而添加的。当前的记录计划是在某个时候将其提升为基本类型。

湛钊
2023-03-14

但是编译警告建议我使用二进制而不是列表,但是为什么呢?以及如何?

“byte”类型被映射到一个8位整数,这对我来说更符合逻辑。

这就是为什么会有这样的警告。这似乎合乎逻辑,但这是最糟糕的选择。此外,Thrift中的字节实际上是一种i8,一种有符号类型。

'二进制'类型映射到std::字符串,这是很奇怪的(我不明白为什么)。

别担心。这是一件历史性的事情。后来添加了二进制类型,并以类似于字符串的方式实现,以减少与旧版本的兼容性摩擦。这只是一个简单的细节。

但我不知道如何使用这些类型。

与其他类型一样:

 struct wtf {
   1 : binary foo
   2 : string bar
   3 : byte baz     // i8 is replacing byte to indicate the signedness
   4 : list<byte>   // not recommended, but nevertheless works 
 }
 类似资料:
  • 我在研究“头先Java”中的多态性,并由此产生了这个概念。谁能举个例子解释一下吗? 编译器检查引用类型的类,而不是对象类型。 那么引用类型和对象类型之间有什么区别呢?

  • 本文向大家介绍成本差异和进度差异之间的差异,包括了成本差异和进度差异之间的差异的使用技巧和注意事项,需要的朋友参考一下 对于任何应用程序或专门用于任何项目,最关注的因素之一是在开发前和开发后阶段的预算管理和时间管理。因此,要评估任何项目的这两个主要因素,有很多方法,其中成本差异和进度差异是两个重要且主要的方法。 顾名思义,“成本差异”基于项目开发中花费的成本,而“进度差异”则基于相同开发中花费的时

  • 这两者有什么区别?基元类型不能有“类”,可以吗?它是基元类型。没有对象具有类。 这两者有什么不同?

  • 我有这张表格 而这个模型 在我的模型中,我决定不将文件字段定义为,而是使用。 我这样做是为了让我能够抓取上传的文件文件名,并离开spring mvc上传文件。这是可行的,但当我引入错误检查时,我会得到以下错误: org.springframework.validation.beanpropertybindingresult:1错误字段“file”上对象“customer”中的字段错误:拒绝值[or

  • 主要内容:BIT 类型,BINARY 和 VARBINARY 类型,BLOB 类型MySQL 支持两类字符型数据:文本字符串和二进制字符串。上节《 MySQL字符串类型》我们讲了文本字符串,这节我们来讲解二进制字符串。 二进制字符串类型有时候也直接被称为“二进制类型”。 MySQL 中的二进制字符串有 BIT、 BINARY、 VARBINARY、 TINYBLOB、 BLOB、 MEDIUMBLOB 和 LONGBLOB。 下表中列出了 MySQL 中的二进制数据类型,括号中

  • 我不习惯用口水和口水 我部署了一个服务于业务规则的tomcat服务器 问题是,如果我使用与服务器类型DRL或PKG相反的代码,我会得到两个不同的答案 如果我反对DRL类型的服务器,我会得到一个结果 http://localhost:8180/guvnor/org.drools.guvnor.Guvnor/package/PkgDinamicoBV/LATEST.drl 属性名称="type"val