Apache Thrift:字节和二进制类型之间的区别

时间:2016-11-30 10:44:35

标签: c++ binary byte sequence thrift

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

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

为了表示1024字节的数据,我使用:list<byte> byteSequence,大小为1024。

但编译警告建议我使用binary代替list<byte>,但为什么?如何 ?

我认为使用'binary'可以获得更好的性能,因为1024字节序列的速度非常慢。

谢谢。

1 个答案:

答案 0 :(得分:1)

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

在大小方面,它可能不会在传输层上发生太大变化,但是当您使用所选语言实例化/反序列化对象时,可能会遇到意外情况。例如,在Java中,binary字段将使用byte[]来表示,而list[byte]将为您提供List[Byte],这对于表示同一事物的效率要低得多。

根据thrift doc

,{p}可能是binary的唯一原因。
  

binary:一系列未编码的字节

     

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