class BinData::IO

def initialize(io)


readbits(6), readbits(5) #=> [543210, a9876]
In little endian format:

readbits(6), readbits(5) #=> [765432, 10fed]
In big endian format:

B B B B
S 76543210 S S fedcba98 S
M byte1 L M byte2 L

The IO can handle bitstreams in either big or little endian format.

+io+ is a string it will be automatically wrapped in an StringIO object.
stream position and #seek if setting the current stream position. If
for reading, #write if used for writing, #pos if reading the current
Create a new IO wrapper around +io+. +io+ must support #read if used
def initialize(io)
  raise ArgumentError, "io must not be a BinData::IO" if BinData::IO === io
  # wrap strings in a StringIO
  if io.respond_to?(:to_str)
    io = BinData::IO.create_string_io(io.to_str)
  end
  @raw_io = io
  # initial stream position if stream supports positioning
  @initial_pos = positioning_supported? ? io.pos : 0
  # bits when reading
  @rnbits  = 0
  @rval    = 0
  @rendian = nil
  # bits when writing
  @wnbits  = 0
  @wval    = 0
  @wendian = nil
end