A Buffer is conceptually a substream within a data stream. It has a defined size and it will always read or write the exact number of bytes to fill the buffer. Short reads will skip over unused bytes and short writes will pad the substream with “0” bytes.
require 'bindata' obj = BinData::Buffer.new(:length => 5, :type => [:string, {:value => "abc"}]) obj.to_binary_s #=> "abc\000\000" class MyBuffer < BinData::Buffer default_parameter :length => 8 endian :little uint16 :num1 uint16 :num2 # padding occurs here end obj = MyBuffer.read("\001\000\002\000\000\000\000\000") obj.num1 #=> 1 obj.num1 #=> 2 obj.num_bytes #=> 8 class StringTable < BinData::Record endian :little uint16 :table_size_in_bytes buffer :strings, :length => :table_size_in_bytes do array :read_until => :eof do uint8 :len string :str, :length => :len end end end
Parameters may be provided at initialisation to control the behaviour of an object. These params are:
:length |
The number of bytes in the buffer. |
:type |
The single type inside the buffer. Use a struct if multiple fields are required. |
Generated with the Darkfish Rdoc Generator 2.