我被要求处理一些序列化为二进制的文件(不幸的是不是文本/JSON)Thrift http://incubator.apache.org/thrift/对象,但我无权访问创建这些文件的程序或程序员,所以我不知道它们的结构、字段顺序等。有没有办法使用 Thrift 库打开二进制文件并分析它,获取字段类型、值、嵌套等的列表?
不幸的是,Thrift 的二进制协议根本没有做太多的数据标记;要对其进行解码,似乎假设您手头有 .thrift 文件,因此您知道接下来的 4 个字节应该是整数,而实际上并不是浮点数的前半部分。因此,看起来您基本上只能在十六进制编辑器(或同等编辑器)中查看文件,并尝试根据您所看到的确切模式来推断字段。
有一些有用的信息:
每个文件都以版本、协议标识符字符串和序列号开头。映射将以 6 个字节开始,用于标识键和值类型(前两个字节,作为整数代码)加上作为 4 字节整数的元素数量。类型代码似乎是标准的(它们定义的规范位置似乎是 Thrift 源中的 TProtocol.h,例如,布尔值由类型代码 2 指定,UTF-8 字符串由类型代码 16 指定,依此类推) 。字符串以 4 字节整数长度字段为前缀,列表以类型(1 字节)和 4 字节长度为前缀。看起来所有整数字段都以大尾数法保存,浮点数以 IEEE 格式保存(这至少应该使双精度数相对容易找到)。
Thrift 中的 TBinaryProtocol* 文件有一些更有用的详细信息;从好的方面来说,有许多不同的实现,因此您可以阅读用您最熟悉的语言实现的实现。
抱歉,我知道这可能没有那么有帮助,但看起来这确实是 Thrift 二进制格式提供的所有信息;显然,二进制格式的设计目的是让您始终知道确切的协议规范,并且目标是最小化线路空间,而不是使其易于盲目解码。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)