如何将 3rd 方数据结构解组为对象

How can I unmarshall a 3rd party data structure into a object

我希望将第 3 方数据结构解组为 ruby 对象,这样我就可以打印该结构的美化版本。

我知道数据结构的布局,但我似乎找不到将数据读入 ruby 结构的好方法。我查看了使用 String#unpack,但它要求我记住每个解包调用的所有先前偏移量,这很不幸。

是否有更好的替代方法或使用 readByte/Short/Int 调用将数据读入结构的实际方法?

看看https://github.com/dmendel/bindata 它可以完成工作,但比仅仅打开包装要慢。如果您有大量数据 and/or 反序列化速度是解包的关键。

过去,我不得不使用 C、Perl 和 Ruby 来分解 MP3、图像文件等。这些数据流可以包含固定长度和可变长度字段。一些字段位于距数据开头或结尾的已知偏移处。有些字段甚至不必存在,您必须深入研究数据以确定它们是否存在基于启发式方法。

固定长度的记录很容易,您可以从维护字段大小的数据库输出或编码数据中获得这些记录。

有时必须进行增量解析,先获取已知信息,然后将已解析内容的大小相加,然后将其用作获取下一个字段的偏移量,然后迭代遍历结构。

如果没有样本输入或不了解文件格式,我们很难说出处理数据的理想方式。

虽然可以使用访问器或方法来掩盖一切背后发生的事情,但 unpackscanf 类型的方法很可能是所使用的核心方法。两者仍然是面​​向 field/data-type 的,需要预先了解 format/fields。