¿Alguna vez te encuentras escribiendo código como este?
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 feo, viola DRY y no se siente Ruby.
Hay una mejor manera. Así es como escribirías lo anterior usando 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 proporciona una forma declarativa de leer y escribir datos binarios estructurados.
Esto significa que el programador especifica cuál es el formato de los datos binarios y BinData descubre cómo leer y escribir datos en este formato. Es una alternativa más fácil (y más legible) a los métodos #pack
y #unpack
de Ruby.
BinData facilita la creación de nuevos tipos de datos. Admite todos los tipos de datos primitivos comunes que se encuentran en formatos de datos binarios estructurados. La compatibilidad con campos dependientes y de longitud variable está integrada.
$ gem install bindata
Manual de BinData.
Si tiene alguna consulta, informe de error o sugerencia, comuníquese conmigo (Dion Mendel) por correo electrónico a [email protected].