public Object input_obj()
{
// magic key
byte[] magic= new byte[4];
int size= stream.Read( magic, 0, 4 );
if (size == -1)
return eof._eof;
if ( (size != 4)
|| (magic[0] != MAGIC_WORD[0])
|| (magic[1] != MAGIC_WORD[1])
|| (magic[2] != MAGIC_WORD[2])
|| (magic[3] != MAGIC_WORD[3]))
foreign.fail( "input_obj", "corrupted file", this );
// the object length
byte[] slen= new byte[4];
size= stream.Read( slen, 0, 4 );
if (size != 4)
foreign.fail( "input_obj", "corrupted file", this );
int clen= (slen[0] & 0xff)
+ ((slen[1] & 0xff) << 8)
+ ((slen[2] & 0xff) << 16)
+ ((slen[3] & 0xff) << 24);
// we start reading
byte[] _string= new byte[clen];
stream.Read( _string, 0, clen );
// unserialize the object
return foreign.__cb__.string_to_obj( _string );
}