# File ruby/bstream.rb, line 433
        def read_block(input)
          header = input.getc
          raise EOFError.new() if header.nil?
          case header
          when T_NULL
                yield T_NULL,nil
                return 1
          when T_BOOLEAN_TRUE
                yield T_BOOLEAN_TRUE,true
                return 1
          when T_BOOLEAN_FALSE
                yield T_BOOLEAN_FALSE,false
                return 1
          when T_INTEGER1
                val = input.read(1).unpack("c").shift
                yield T_INTEGER1,val
                return 2
          when T_INTEGER2
                yield T_INTEGER2,read_int2(input)
                return 3
          when T_INTEGER4
                yield T_INTEGER4,read_int4(input)
                return 5
          when T_INTEGER8
                yield T_INTEGER8,read_int8(input)
                return 9
          when T_FLOAT
                val = input.read(4).unpack("e").shift
                yield T_FLOAT,val
                return 5
          when T_DOUBLE
                val = input.read(8).unpack("E").shift
                yield T_DOUBLE,val
                return 9
          when T_STRING
                len = read_int4(input)
                str = input.read(len)
                yield T_STRING,str
                return 5+len
          when T_DECIMAL
                len = read_int4(input)
                str = input.read(len)
                val = str["."] ? str.to_f : str.to_i
                yield T_DECIMAL, val
                return 5+len
          when T_ARRAY
                len,val = read_array(input)
                yield T_ARRAY,val
                return 1+len
          when T_LIST
                len,val = read_list(input)
                yield T_LIST,val
                return 1+len
          else
                raise IOError.new("Decoder: wrong header: #{header.to_s}")
          end
        end