def read_binary_object(fname,fd)
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
case object_type
when '0'
read_binary_null_type(object_length)
when '1'
read_binary_int(fname,fd,object_length)
when '2'
read_binary_real(fname,fd,object_length)
when '3'
read_binary_date(fname,fd,object_length)
when '4'
read_binary_data(fname,fd,object_length)
when '5'
read_binary_string(fname,fd,object_length)
when '6'
read_binary_unicode_string(fname,fd,object_length)
when '8'
CFUid.new(read_binary_int(fname, fd, object_length).value)
when 'a'
read_binary_array(fname,fd,object_length)
when 'd'
read_binary_dict(fname,fd,object_length)
end
end