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]