# File rbBinaryCFPropertyList.rb, line 297
    def read_binary_object(fname,fd)
      # first: read the marker byte
      buff = fd.read(1)

      object_length = buff.unpack("C*")
      object_length = object_length[0]  & 0xF

      buff = buff.unpack("H*")
      object_type = buff[0][0].chr

      if(object_type != "0" && object_length == 15) then
        object_length = read_binary_object(fname,fd)
        object_length = object_length.value
      end

      retval = nil
      case object_type
      when '0' then # null, false, true, fillbyte
        retval = read_binary_null_type(object_length)
      when '1' then # integer
        retval = read_binary_int(fname,fd,object_length)
      when '2' then # real
        retval = read_binary_real(fname,fd,object_length)
      when '3' then # date
        retval = read_binary_date(fname,fd,object_length)
      when '4' then # data
        retval = read_binary_data(fname,fd,object_length)
      when '5' then # byte string, usually utf8 encoded
        retval = read_binary_string(fname,fd,object_length)
      when '6' then # unicode string (utf16be)
        retval = read_binary_unicode_string(fname,fd,object_length)
      when 'a' then # array
        retval = read_binary_array(fname,fd,object_length)
      when 'd' then # dictionary
        retval = read_binary_dict(fname,fd,object_length)
      end

      return retval
    end