Schreiben Sie jemals Code wie diesen?
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 } "
Es ist hässlich, verstößt gegen DRY und fühlt sich nicht wie Ruby an.
Es gibt einen besseren Weg. So würden Sie das Obige mit BinData schreiben.
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 bietet eine deklarative Möglichkeit zum Lesen und Schreiben strukturierter Binärdaten.
Das bedeutet, dass der Programmierer das Format der Binärdaten angibt und BinData ermittelt, wie Daten in diesem Format gelesen und geschrieben werden. Es ist eine einfachere (und besser lesbare) Alternative zu Rubys #pack
und #unpack
-Methoden.
BinData erleichtert die Erstellung neuer Datentypen. Es unterstützt alle gängigen primitiven Datentypen, die in strukturierten Binärdatenformaten vorkommen. Unterstützung für abhängige und variable Längenfelder ist integriert.
$ gem install bindata
BinData-Handbuch.
Wenn Sie Fragen/Fehlerberichte/Vorschläge haben, kontaktieren Sie mich (Dion Mendel) bitte per E-Mail unter [email protected]