全パッケージ クラス階層 このパッケージ 前項目 次項目 インデックス
java.lang.Object
   |
   +----java.io.InputStream
           |
           +----java.io.ObjectInputStream
ObjectInputStreamは、ストリームから生成されたgraphにおけるすべての型のオブジェクトが、Java Virual Machineに存在するクラスに確実にマッチするようにします。
ストリームから読み込むことができるのは、 java.io.Serializableインターフェースかjava.io.Externalizableインターフェースをサポートするオブジェクトだけです。メソッド readObjectは、オブジェクトをストリームから読み込むために使います。希望の型を取得するには、 Javaのsafe castingを使う必要があります。 Javaでは、文字列と配列はオブジェクトで、直列化の間はオブジェクトとして扱われます。読み込むとき、それらは希望の型にキャストしている必要があります。
プリミティブデータ型は、DataInputの適切なメソッドを使って、ストリームから読み込むことができます。
デフォルトとなっている、オブジェクトの直列化復元メカニズムは、各フィールドの内容を、書き込まれたときのものに戻します。 transientあるいはstaticと宣言されたフィールドは、直列化復元処理からは無視されます。他のオブジェクトへの参照によって、それらのオブジェクトは、必要なものとしてストリームから読み込まれます。オブジェクトのgraphは、参照共有メカニズムを使って正しく復元されます。直列化復元が行われるときには、常に新しいオブジェクトが割り当てられ、そのことによって既存のオブジェクトへの上書きが防止されます。
オブジェクトの読み込みは、新しいオブジェクトの構築子の実行と似ています。メモリはオブジェクトに割り当てられ、ゼロ(NULL)に初期化されます。引数無しの構築子が、直列化できないクラスについて呼び出されたあと、直列化できるクラスのフィールドが、java.lang.Objectに最も近いクラスから始まり最もオブジェクトに特有のクラスで終わるストリームから復元されます。
たとえば、ObjectOutputStreamの例によって書き込まれたストリームからの読み込みは次のように行います。 
 
	FileInputStream istream = new FileInputStream("t.tmp");
	ObjectInputStream p = new ObjectInputStream(istream);
	int i = p.readInt();
	String today = (String)p.readObject();
	Date date = (Date)p.readObject();
	istream.close();
 
 クラスは、 java.io.Serializableかjava.io.Externalizableインターフェースを実装することによって、クラスがどのように直列化されるかを制御します。 Serializableインターフェースを実装することによって、オブジェクトの直列化が、オブジェクトのすべての状態の保存と管理をすることが可能となり、またクラスが、ストリームが書き込まれる時間とストリームが読み込まれる時間との間に発展することが可能となります。 クラスは、オブジェクト間の参照を自動的に移動し、graphの全体を保存および復元します。直列化処理と直列化復元処理のときに特別な操作を必要とするSerializableクラスは、これらのメソッドの両方を実装する必要があります。:
 private void writeObject(java.io.ObjectOutputStream stream)
     throws IOException;
 private void readObject(java.io.ObjectInputStream stream)
     throws IOException, ClassNotFoundException; 
 readObjectメソッドは、適切なwriteObjectメソッドによってストリームに書き込まれるデータを使用する特定のクラスについて、オブジェクトの状態を保存および復元する権限を持ちます。このメソッドは、そのスーパークラスやサブクラスに属する状態に関与する必要はありません。状態を復元するには、個別のフィールドについてObjectInputStreamからデータを読み込み、オブジェクトの適切なフィールドへの割り当て を行います。プリミティブデータ型の読み込みは、DataInputによってサポートされます。
直列化は、 java.io.Serializableインターフェースを実装しないオブジェクトのフィールドの読み込みや、それらのフィールドへの値の割り当ては行いません。直列化できないオブジェクトのサブクラスを直列化可能とすることができます。この場合、直列化できないクラスは、そのフィールドを初期化できるようにするためno-arg構築子を持つ必要があります。この場合、直列化できないクラスの状態を保存および復元するのは、サブクラスの権限となります。 そのクラスのフィールドがアクセス可能である(public、パッケージかprotected)場合がしばしばあります。
オブジェクトを直列化復元する間に発生したすべての例外は、 ObjectInputStreamにキャッチされ、読み込み処理を異常終了させます。
Externalizableインターフェースを実装することは、オブジェクトが、オブジェクトの直列化されたフォームの、内容およびフォーマットをすべて制御することを可能にします。Externalizableインターフェースのメソッドである writeExternalとreadExternalは、オブジェクトの状態を保存および復元するために呼び出されます。これらのメソッドは、クラスによって実装された場合には、 ObjectOutputとObjectInputのすべてのメソッドを使って、自分の状態の書き込みと読み込みをすることができます。 発生するすべてのバージョン決定の操作は、オブジェクトの権限となります。
 
 ObjectInputStream(InputStream)
	ObjectInputStream(InputStream)
   
 available()
	available()
   close()
	close()
   defaultReadObject()
	defaultReadObject()
   enableResolveObject(boolean)
	enableResolveObject(boolean)
   read()
	read()
   read(byte[], int, int)
	read(byte[], int, int)
   readBoolean()
	readBoolean()
   readByte()
	readByte()
   readChar()
	readChar()
   readDouble()
	readDouble()
   readFloat()
	readFloat()
   readFully(byte[])
	readFully(byte[])
   readFully(byte[], int, int)
	readFully(byte[], int, int)
   readInt()
	readInt()
   readLine()
	readLine()
   readLong()
	readLong()
   readObject()
	readObject()
   readShort()
	readShort()
   readStreamHeader()
	readStreamHeader()
   readUnsignedByte()
	readUnsignedByte()
   readUnsignedShort()
	readUnsignedShort()
   readUTF()
	readUTF()
   registerValidation(ObjectInputValidation, int)
	registerValidation(ObjectInputValidation, int)
   resolveClass(ObjectStreamClass)
	resolveClass(ObjectStreamClass)
   resolveObject(Object)
	resolveObject(Object)
   skipBytes(int)
	skipBytes(int)
   
 ObjectInputStream
ObjectInputStream
public ObjectInputStream(InputStream in) throws IOException, StreamCorruptedException
 
 readObject
readObject
public final Object readObject() throws OptionalDataException, ClassNotFoundException, IOException
ルートオブジェクトは、参照するフィールドとオブジェクトのすべてが復元された時、完全に復元されます。 この時点で、それらの登録された優先順位に基づいて、オブジェクト検証コールバックが実行されます。このコールバックは、(readObject特別メソッドの)オブジェクトによって、それらが個別に復元されるときに登録されます。 例外は、InputStreamによる問題や、直列化復元するべきではないクラスについてスローされます。すべての例外は、 InputStreamにとって致命的で、 InputStreamを不確定の状態にします。 ストリームの状態を無視するか復元するかを決めるのは呼び出し側です。
 defaultReadObject
defaultReadObject
public final void defaultReadObject() throws IOException, ClassNotFoundException, NotActiveException
 registerValidation
registerValidation
  public synchronized void registerValidation(ObjectInputValidation obj,
                                              int prio) throws NotActiveException, InvalidObjectException
 resolveClass
resolveClass
protected Class resolveClass(ObjectStreamClass v) throws IOException, ClassNotFoundException
デフォルトでは、 クラス名は、readObjectを呼び出した クラスと対比して決められます。
 resolveObject
resolveObject
protected Object resolveObject(Object obj) throws IOException
このメソッドは、オブジェクトが読み込まれた後 、readObjectが返される前に呼び出されます。デフォルトのresolveObjectメソッドは、新しいオブジェクトだけを返します。
サブクラスはオブジェクトを置換するとき、 置換されたオブジェクトと、参照が格納される各フィールドとの互換性を保証する必要があります。フィールドまたは配列要素のサブクラスではない型のオブジェクトは、例外を呼び出すことによって直列化を異常終了させ、オブジェクトは格納されません。
このメソッドは、各オブジェクトに最初に相対したときに1度だけ呼び出されます。オブジェクトの、すべての後続の参照は、新しいオブジェクトにリダイレクトされます。
 enableResolveObject
enableResolveObject
protected final boolean enableResolveObject(boolean enable) throws SecurityException
置換が可能になった場合、 resolveObjectメソッドが、直列化復元される各オブジェクトについて呼び出されます。
 readStreamHeader
readStreamHeader
protected void readStreamHeader() throws IOException, StreamCorruptedException
 read
read
public int read() throws IOException
 read
read
  public int read(byte data[],
                  int offset,
                  int length) throws IOException
 available
available
public int available() throws IOException
 close
close
public void close() throws IOException
 readBoolean
readBoolean
public boolean readBoolean() throws IOException
 readByte
readByte
public byte readByte() throws IOException
 readUnsignedByte
readUnsignedByte
public int readUnsignedByte() throws IOException
 readShort
readShort
public short readShort() throws IOException
 readUnsignedShort
readUnsignedShort
public int readUnsignedShort() throws IOException
 readChar
readChar
public char readChar() throws IOException
 readInt
readInt
public int readInt() throws IOException
 readLong
readLong
public long readLong() throws IOException
 readFloat
readFloat
public float readFloat() throws IOException
 readDouble
readDouble
public double readDouble() throws IOException
 readFully
readFully
public void readFully(byte data[]) throws IOException
 readFully
readFully
  public void readFully(byte data[],
                        int offset,
                        int size) throws IOException
 skipBytes
skipBytes
public int skipBytes(int len) throws IOException
 readLine
readLine
public String readLine() throws IOException
 readUTF
readUTF
public String readUTF() throws IOException
全パッケージ クラス階層 このパッケージ 前項目 次項目 インデックス