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のマニュアル。
ご質問、バグレポート、ご提案がございましたら、電子メール ([email protected]) で私 (Dion Mendel) までご連絡ください。