protected Object readObjectImpl ( Class cl ) throws IOException { try { Object obj = cl . newInstance ( ) ; if ( _refs == null ) _refs = new ArrayList ( ) ; _refs . add ( obj ) ; HashMap fieldMap = getFieldMap ( cl ) ; int code = read ( ) ; for ( ; code >= 0 && code != ' ' ; code = read ( ) ) { unread ( ) ; Object key = readObject ( ) ; Field field = ( Field ) fieldMap . get ( key ) ; if ( field != null ) { Object value = readObject ( field . getType ( ) ) ; field . set ( obj , value ) ; } else { Object value = readObject ( ) ; } } if ( code != ' ' ) throw expect ( "map" , code ) ; // if there's a readResolve method, call it try { Method method = cl . getMethod ( "readResolve" , new Class [ 0 ] ) ; return method . invoke ( obj , new Object [ 0 ] ) ; } catch ( Exception e ) { } return obj ; } catch ( IOException e ) { throw e ; } catch ( Exception e ) { throw new IOExceptionWrapper ( e ) ; } }
Reads an object from the input stream . cl is known not to be a Map .