我希望将第三方数据结构解组为ruby对象,因此我可以打印出结构的美化版本。
我知道数据结构的布局,但我似乎找不到将数据读入ruby结构的好方法。我查看了使用String#unpack
,但它要求我记住每个解包调用的所有先前偏移量,这是不幸的。
是否有一个很好的替代方法,或使用readByte / Short / Int调用将数据读入结构的事实上的方式?
答案 0 :(得分:1)
看看https://github.com/dmendel/bindata 它将完成工作但速度慢于解压缩。如果你有很多数据和/或反序列化的速度,那么关键就是解包。
答案 1 :(得分:1)
在我过去,我不得不使用C,Perl和Ruby拆分MP3,图像文件等。这些数据流可以包含固定长度和可变长度字段。某些字段位于数据开头或结尾的已知偏移处。有些字段甚至不必存在,您必须深入研究数据,以确定它们是否基于启发式存在。
固定长度记录很简单,您可以从数据库输出中获取那些他们维护字段大小或来自编码数据的记录。
有时候必须进行增量解析,你抓住你所知道的,然后你将你解析到的那个点的大小相加,然后用它作为一个偏移来抓住下一个字段,并且迭代地走过这个结构。
我们很难说出处理数据的理想方式是没有样本输入或知道文件格式是什么。
尽管可以使用访问器或方法来掩盖所有内容下发生的事情,但unpack
或scanf
类型方法是使用的核心方法的可能性很大。两者仍然以字段/数据类型为导向,需要预先了解格式/字段。