org.objectweb.carol.irmi
Class RMIObjectInputStream

java.lang.Object
  extended byjava.io.InputStream
      extended byjava.io.ObjectInputStream
          extended byorg.objectweb.carol.irmi.RMIObjectInputStream
All Implemented Interfaces:
DataInput, ObjectInput, ObjectStreamConstants

public class RMIObjectInputStream
extends ObjectInputStream

RMIObjectInputStream is a specialized subclass of ObjectInputStream used by this RMI implementation. It must be used in concert with RMIObjectOutputStream. Specialized behavior includes class resolution using RMIClassLoader, and caching of class descriptors.

Author:
Rafael H. Schloming <rhs@mit.edu>

Nested Class Summary
 
Nested classes inherited from class java.io.ObjectInputStream
ObjectInputStream.GetField
 
Field Summary
 
Fields inherited from interface java.io.ObjectStreamConstants
baseWireHandle, PROTOCOL_VERSION_1, PROTOCOL_VERSION_2, SC_BLOCK_DATA, SC_EXTERNALIZABLE, SC_SERIALIZABLE, SC_WRITE_METHOD, STREAM_MAGIC, STREAM_VERSION, SUBCLASS_IMPLEMENTATION_PERMISSION, SUBSTITUTION_PERMISSION, TC_ARRAY, TC_BASE, TC_BLOCKDATA, TC_BLOCKDATALONG, TC_CLASS, TC_CLASSDESC, TC_ENDBLOCKDATA, TC_EXCEPTION, TC_LONGSTRING, TC_MAX, TC_NULL, TC_OBJECT, TC_PROXYCLASSDESC, TC_REFERENCE, TC_RESET, TC_STRING
 
Constructor Summary
RMIObjectInputStream(InputStream in)
          Constructs a new RMIObjectInputStream that ready from the specified InputStream.
 
Method Summary
protected  ObjectStreamClass readClassDescriptor()
          Implementation of the ObjectInputStream.readClassDescriptor() callback.
protected  void readStreamHeader()
          Implementation of the ObjectInputStream.readStreamHeader() callback.
protected  Class resolveClass(ObjectStreamClass desc)
          Implementation of the ObjectInputStream.resolveClass(ObjectStreamClass) callback.
protected  Class resolveProxyClass(String[] interfaces)
          Implementation of the ObjectInputStream.resolveProxyClass(String[]) callback.
 
Methods inherited from class java.io.ObjectInputStream
available, close, defaultReadObject, enableResolveObject, read, read, readBoolean, readByte, readChar, readDouble, readFields, readFloat, readFully, readFully, readInt, readLine, readLong, readObject, readObjectOverride, readShort, readUnshared, readUnsignedByte, readUnsignedShort, readUTF, registerValidation, resolveObject, skipBytes
 
Methods inherited from class java.io.InputStream
mark, markSupported, read, reset, skip
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface java.io.ObjectInput
read, skip
 

Constructor Detail

RMIObjectInputStream

public RMIObjectInputStream(InputStream in)
                     throws IOException
Constructs a new RMIObjectInputStream that ready from the specified InputStream.

Parameters:
in - the InputStream to use for input
Method Detail

resolveClass

protected Class resolveClass(ObjectStreamClass desc)
                      throws IOException,
                             ClassNotFoundException
Implementation of the ObjectInputStream.resolveClass(ObjectStreamClass) callback. This implementation delegates to RMIClassLoader.

Parameters:
desc - the ObjectStreamClass serialized representation of the class object
Returns:
the resolved Class object corresponding to the serialized class object
Throws:
IOException - if there is an error with the underlying stream
ClassNotFoundException - if the serialized class cannot be located

resolveProxyClass

protected Class resolveProxyClass(String[] interfaces)
                           throws IOException,
                                  ClassNotFoundException
Implementation of the ObjectInputStream.resolveProxyClass(String[]) callback. This implementation delegates to RMIClassLoader.

Parameters:
interfaces - the interfaces implemented by the serialized proxy class
Returns:
the resolved Class object corresponding to the serialized class object
Throws:
IOException - if there is an error with the underlying stream
ClassNotFoundException - if any of the serialized interfaces cannot be located

readClassDescriptor

protected ObjectStreamClass readClassDescriptor()
                                         throws IOException,
                                                ClassNotFoundException
Implementation of the ObjectInputStream.readClassDescriptor() callback. This implementation reads a class id from the underlying input stream and either delegates to its superclass to read in a full class descriptor or uses the id to return a previosuly read class descriptor.

Returns:
the serialized ObjectStreamClass
Throws:
IOException
ClassNotFoundException

readStreamHeader

protected void readStreamHeader()
Implementation of the ObjectInputStream.readStreamHeader() callback. This implementation is specifically overridden to do nothing. See ObjectOutputStream.writeStreamHeader() for details.