bindata
1.0.0
您是否曾经发现自己编写过这样的代码?
io = File . open ( ... )
len = io . read ( 2 ) . unpack ( "v" )
name = io . read ( len )
width , height = io . read ( 8 ) . unpack ( "VV" )
puts "Rectangle #{ name } is #{ width } x #{ height } "
它很丑陋,违反了 DRY,而且感觉不像 Ruby。
有一个更好的方法。以下是使用 BinData 编写上述内容的方法。
class Rectangle < BinData :: Record
endian :little
uint16 :len
string :name , :read_length => :len
uint32 :width
uint32 :height
end
io = File . open ( ... )
r = Rectangle . read ( io )
puts "Rectangle #{ r . name } is #{ r . width } x #{ r . height } "
BinData 提供了一种读取和写入结构化二进制数据的声明性方法。
这意味着程序员指定二进制数据的格式是什么,BinData 计算出如何读写这种格式的数据。它是 ruby 的#pack
和#unpack
方法的更简单(且更具可读性)的替代方法。
BinData 可以轻松创建新的数据类型。它支持结构化二进制数据格式中的所有常见原始数据类型。内置对依赖字段和可变长度字段的支持。
$ gem install bindata
BinData 手册。
如果您有任何疑问/错误报告/建议,请通过电子邮件与我(Dion Mendel)联系:[email protected]