JavaTM Platform
Standard Ed. 6

java.io
クラス ObjectInputStream

java.lang.Object
  上位を拡張 java.io.InputStream
      上位を拡張 java.io.ObjectInputStream
すべての実装されたインタフェース:
Closeable, DataInput, ObjectInput, ObjectStreamConstants

public class ObjectInputStream
extends InputStream
implements ObjectInput, ObjectStreamConstants

事前に ObjectOutputStream を使って作成されたプリミティブデータとプリミティブオブジェクトを直列化復元します。  

ObjectOutputStream と ObjectInputStream は、FileOutputStream または FileInputStream とともに使えば、アプリケーションに、オブジェクトのグラフのための持続的なストレージを提供することができます。ObjectInputStream は、事前に直列化されたオブジェクトを元に戻すために使います。ほかの使用方法としては、ソケットストリームの使用による、ホスト間でのオブジェクトの受け渡しや、リモート通信システムでの属性やパラメータの整列や整列解除があります。  

ObjectInputStream は、ストリームから作成されたオブジェクトグラフでのすべての型のオブジェクトが、Java Virual Machine に存在するクラスに確実にマッチするようにします。クラスは、標準の機構を使って必要に応じてロードされます。  

ストリームから読み込むことができるのは、java.io.Serializable インターフェースか java.io.Externalizable インターフェースをサポートするオブジェクトだけです。  

オブジェクトをストリームから読み込むには readObject メソッドを使います。希望の型を取得するには、Java の安全なキャストを使う必要があります。Java では、文字列と配列はオブジェクトで、直列化の間はオブジェクトとして扱われます。それらを読み込む際には、希望の型にキャストされている必要があります。  

基本データ型をストリームから読み込むには、DataInput の適切なメソッドを使います。  

オブジェクトのデフォルトの直列化復元機構は、各フィールドの内容を、書き込まれたときの状態に戻します。transient または static と宣言されたフィールドは、直列化復元処理では無視されます。ほかのオブジェクトを参照すると、それらのオブジェクトは、必要に応じてストリームから読み込まれます。オブジェクトのグラフは、参照共有機構を使って正しく復元されます。直列化復元が行われるときには、常に新しいオブジェクトが割り当てられ、それによって既存のオブジェクトへの上書きが防止されます。  

オブジェクトの読み込みは、新しいオブジェクトのコンストラクタの実行に似ています。メモリーがオブジェクトに割り当てられ、ゼロ (NULL) に初期化されます。直列化可能でないクラスに対して、引数なしのコンストラクタが呼び出されたあと、直列化可能クラスのフィールドが、java.lang.Object にもっとも近いクラスから始まって、もっともオブジェクトに固有のクラスで終わるストリームから復元されます。  

たとえば、ObjectOutputStream の例で書き込まれたストリームからの読み込みは、次のように行います。
 

        FileInputStream fis = new FileInputStream("t.tmp");
        ObjectInputStream ois = new ObjectInputStream(fis);

        int i = ois.readInt();
        String today = (String) ois.readObject();
        Date date = (Date) ois.readObject();

        ois.close();
 
 

クラスは、インタフェース java.io.Serializable または java.io.Externalizable を実装することによって、クラスがどのように直列化されるかを制御します。  

Serializable インタフェースを実装することによって、オブジェクトの直列化が、オブジェクトの状態全体の保存と復元を行うことが可能になり、またクラスが、ストリームの書き込み時とストリームの読み込み時の間に展開することが可能になります。オブジェクトの直列化は、オブジェクト間の参照を自動的にトラバースし、オブジェクトグラフの全体を保存および復元します。  

直列化処理と直列化復元処理のときに特別な操作を必要とする Serializable クラスは、次のメソッドを実装する必要があります。

 

 private void writeObject(java.io.ObjectOutputStream stream)
     throws IOException;
 private void readObject(java.io.ObjectInputStream stream)
     throws IOException, ClassNotFoundException; 
 private void readObjectNoData() 
     throws ObjectStreamException;
 
 

readObject メソッドは、対応する writeObject メソッドによってストリームに書き込まれたデータを使用する特定のクラスについて、オブジェクトの状態を読み込みおよび復元する責任を持ちます。このメソッドは、そのスーパークラスやサブクラスに属する状態に関与する必要はありません。状態を復元するには、個々のフィールドについて ObjectInputStream からデータを読み込み、オブジェクトの適切なフィールドへの割り当てを行います。基本データ型の読み込みは、DataInput によってサポートされます。  

オブジェクトデータを読み込もうとするときに、その位置が対応する writeObject メソッドによって書き込まれたカスタムデータの境界を超えている場合は、eof フィールドの値が true の状態で OptionalDataException がスローされます。オブジェクトを直列化して読み込もうとするときに、その位置が割り当て済みデータの終わりを超えている場合は、ストリームの場合と同様に、データの終わりを示す例外が返されます。つまり、バイト単位の読み込みでは、バイトが読み込まれたときに -1 が返されます。プリミティブ読み込みでは、EOFException がスローされます。対応する writeObject メソッドがない場合は、デフォルトの直列化データの終わりが割り当て済みデータの終わりになります。  

プリミティブ読み込みとオブジェクト読み込みが readExternal メソッドから呼び出された場合は、両方とも同じように動作します。ストリームの位置が対応する writeExternal メソッドによって書き込まれたデータの終わりにある場合、オブジェクト読み込みでは eof が true に設定された状態で OptionalDataException がスローされ、プリミティブ読み込みでは EOFException がスローされます。ただし、古い ObjectStreamConstants.PROTOCOL_VERSION_1 プロトコルを使用して書き込まれたストリームでは、この動作は適用されません。writeExternal メソッドと異なり、データの終わりが書き込まれないため、データの終わりを検出できないためです。  

readObjectNoData メソッドは、あるクラスが直列化復元されるオブジェクトのスーパークラスとして直列化ストリームに指定されていないときに、そのクラスについてそのオブジェクトの状態を初期化します。これは、受け取り側が、送り側とは異なるバージョンの直列化復元されたインスタンスのクラスを使用し、受け取り側のバージョンが送り側のバージョンによって継承されないクラスを継承する場合に発生する可能性があります。また、直列化ストリームが改変された場合にも発生することがあります。したがって、readObjectNoData は、「悪意のある」または不正なソースストリームであっても、直列化復元されたオブジェクトを正しく初期化するのに役立ちます。  

直列化は、java.io.Serializable インタフェースを実装しないオブジェクトのフィールドの読み込みや、それらのフィールドへの値の割り当ては行いません。直列化可能でないオブジェクトのサブクラスを直列化可能にすることは可能です。この場合、直列化可能でないクラスは、そのフィールドを初期化できるようにするため、引数なしのコンストラクタを持つ必要があります。この場合、直列化可能でないクラスの状態を保存および復元するのは、サブクラスの責任になります。そのクラスのフィールドがアクセス可能である (public、package、または protected) 場合、あるいは状態の復元に利用できる set メソッドや get メソッドがある場合がしばしばあります。  

オブジェクトを直列化復元する間に発生したすべての例外は、ObjectInputStream にキャッチされ、読み込み処理を異常終了させます。  

Externalizable インタフェースを実装すると、オブジェクトの直列化された形式の内容および形式をオブジェクト側が完全に制御することが可能になります。Externalizable インタフェースのメソッドである writeExternal と readExternal は、オブジェクトの状態を保存および復元するために呼び出されます。これらのメソッドは、クラスによって実装された場合には、ObjectOutput と ObjectInput のすべてのメソッドを使って、自身の状態の書き込みおよび読み込みを行うことができます。どのようなバージョンであっても処理できるようにするのは、オブジェクトの責任です。  

enum 定数の直列化復元は、通常の直列化可能または外部化可能オブジェクトとは異なります。enum 定数の直列化された形式を構成するのは、その名前だけです。定数のフィールド値は転送されません。enum 定数を直列化復元するには、ObjectInputStream でストリームから定数名を読み込みます。次に、enum 定数の基底型と受け取った定数名を引数として static メソッドの Enum.valueOf(Class, String) を呼び出し、直列化復元された定数を取得します。ほかの直列化可能または外部化可能オブジェクト同様に、enum 定数は、以後直列化ストリームに出現する後方参照の対象として機能できます。enum 定数を直列化復元するプロセスをカスタマイズすることはできません。enum 型で定義された、クラス固有の readObject、readObjectNoData、および readResolve メソッドはどれも直列化復元の間は無視されます。同様に、serialPersistentFields または serialVersionUID のフィールド宣言もすべて無視されます。すべての enum 型は 0L で固定された serialVersionUID を持ちます。

導入されたバージョン:
JDK1.1
関連項目:
DataInput, ObjectOutputStream, Serializable, 「オブジェクト直列化仕様の第 3 章オブジェクト入力クラス」

入れ子のクラスの概要
static class ObjectInputStream.GetField
          入力ストリームから読み込まれた持続フィールドへのアクセスを提供します。
 
フィールドの概要
 
インタフェース java.io.ObjectStreamConstants から継承されたフィールド
baseWireHandle, PROTOCOL_VERSION_1, PROTOCOL_VERSION_2, SC_BLOCK_DATA, SC_ENUM, 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_ENUM, TC_EXCEPTION, TC_LONGSTRING, TC_MAX, TC_NULL, TC_OBJECT, TC_PROXYCLASSDESC, TC_REFERENCE, TC_RESET, TC_STRING
 
コンストラクタの概要
protected ObjectInputStream()
          ObjectInputStream を完全に再実装するサブクラスが、ObjectInputStream のこの実装によって使用されたばかりの private データを割り当てる必要がないようにする手段を提供します。
  ObjectInputStream(InputStream in)
          指定された InputStream から読み込む ObjectInputStream を作成します。
 
メソッドの概要
 int available()
          ブロックせずに読み込むことができるバイト数を返します。
 void close()
          入力ストリームを閉じます。
 void defaultReadObject()
          現在のクラスの非 static および非 transient フィールドを、このストリームから読み込みます。
protected  boolean enableResolveObject(boolean enable)
          ストリームから読み込まれたオブジェクトを置換できるようにします。
 int read()
          データのバイトを読み込みます。
 int read(byte[] buf, int off, int len)
          バイト配列に読み込みます。
 boolean readBoolean()
          boolean を読み込みます。
 byte readByte()
          8 ビットのバイトを読み込みます。
 char readChar()
          16 ビットの char を読み込みます。
protected  ObjectStreamClass readClassDescriptor()
          直列化ストリームからクラス記述子を読み込みます。
 double readDouble()
          64 ビットの double を読み込みます。
 ObjectInputStream.GetField readFields()
          ストリームから持続フィールドを読み込み、それらを名前を指定してアクセスできるようにします。
 float readFloat()
          32 ビットの float を読み込みます。
 void readFully(byte[] buf)
          バイトを読み込みます。
 void readFully(byte[] buf, int off, int len)
          バイトを読み込みます。
 int readInt()
          32 ビットの int を読み込みます。
 String readLine()
          推奨されていません。 このメソッドはバイトを正確に文字に変換しません。詳細および代替メソッドについては DataInputStream を参照してください。
 long readLong()
          64 ビットの long を読み込みます。
 Object readObject()
          ObjectInputStream からオブジェクトを読み込みます。
protected  Object readObjectOverride()
          このメソッドは、引数なしの protected コンストラクタを使用して、ObjectOutputStream を構築した ObjectOutputStream の信頼できるサブクラスによって呼び出されます。
 short readShort()
          16 ビットの short を読み込みます。
protected  void readStreamHeader()
          サブクラスが自身のストリームヘッダーの読み込みと検証を行えるようにするために提供されています。
 Object readUnshared()
          ObjectInputStream から「共有されない」オブジェクトを読み込みます。
 int readUnsignedByte()
          符号なし 8 ビットバイトを読み込みます。
 int readUnsignedShort()
          符号なし 16 ビットの short を読み込みます。
 String readUTF()
          修正 UTF-8 形式の文字列を読み込みます。
 void registerValidation(ObjectInputValidation obj, int prio)
          オブジェクトグラフが返される前に検証されるべきオブジェクトを登録します。
protected  Class<?> resolveClass(ObjectStreamClass desc)
          指定されたストリームクラスの記述に対応するローカルクラスをロードします。
protected  Object resolveObject(Object obj)
          このメソッドは、直列化復元の際に、ObjectInputStream の信頼できるサブクラスが、あるオブジェクトをほかのオブジェクトに置換できるようにします。
protected  Class<?> resolveProxyClass(String[] interfaces)
          プロキシクラス記述子で指定されたインタフェースを実装するプロキシクラスを返します。
 int skipBytes(int len)
          バイトをスキップします。
 
クラス java.io.InputStream から継承されたメソッド
mark, markSupported, read, reset, skip
 
クラス java.lang.Object から継承されたメソッド
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
インタフェース java.io.ObjectInput から継承されたメソッド
read, skip
 

コンストラクタの詳細

ObjectInputStream

public ObjectInputStream(InputStream in)
                  throws IOException
指定された InputStream から読み込む ObjectInputStream を作成します。直列化ストリームヘッダーは、ストリームから読み込まれたあと、検証されます。このコンストラクタは、対応する ObjectOutputStream がヘッダーを書き込んでフラッシュするまでブロックします。  

セキュリティーマネージャーがインストールされている場合、ObjectInputStream.readFields メソッドまたは ObjectInputStream.readUnshared メソッドをオーバーライドするサブクラスのコンストラクタによって SerializablePermission("enableSubclassImplementation") が直接または間接に呼び出されたときに、このコンストラクタはこのアクセス権を確認します。

パラメータ:
in - 読み込み元の入力ストリーム
例外:
StreamCorruptedException - ストリームヘッダーが不正な場合
IOException - ストリームヘッダーの読み込み中に入出力エラーが発生した場合
SecurityException - 信頼されていないサブクラスが、セキュリティー上重要なメソッドを不正にオーバーライドした場合
NullPointerException - innull の場合
関連項目:
ObjectInputStream(), readFields(), ObjectOutputStream.ObjectOutputStream(OutputStream)

ObjectInputStream

protected ObjectInputStream()
                     throws IOException,
                            SecurityException
ObjectInputStream を完全に再実装するサブクラスが、ObjectInputStream のこの実装によって使用されたばかりの private データを割り当てる必要がないようにする手段を提供します。  

セキュリティーマネージャーがインストールされている場合、このメソッドはまずセキュリティーマネージャーの checkPermission メソッドをアクセス権 SerializablePermission("enableSubclassImplementation") で呼び出し、サブクラス化を有効にできるようにします。

例外:
SecurityException - セキュリティーマネージャーが存在し、その checkPermission メソッドがサブクラス化を有効にすることを拒否した場合
IOException
関連項目:
SecurityManager.checkPermission(java.security.Permission), SerializablePermission
メソッドの詳細

readObject

public final Object readObject()
                        throws IOException,
                               ClassNotFoundException
ObjectInputStream からオブジェクトを読み込みます。オブジェクトのクラス、クラスのシグニチャー、クラスの非 transient フィールドおよび非 static フィールドの値とそのすべてのスーパータイプが読み込まれます。あるクラスについてのデフォルトの直列化復元は、writeObject メソッドと readObject メソッドを使ってオーバーライドすることができます。このオブジェクトによって参照されるオブジェクトは中間的に読み込まれ、それによって、完全に同等なオブジェクトグラフが readObject によって再構築されます。  

ルートオブジェクトは、参照するフィールドとオブジェクトのすべてが復元された時、完全に復元されます。この時点で、それらの登録された優先順位に基づいて、オブジェクト検証コールバックが実行されます。このコールバックは、(特別な readObject メソッドの) オブジェクトによって、それらが個別に復元されるときに登録されます。  

例外は、InputStream に関する問題や、直列化復元すべきではないクラスについてスローされます。すべての例外は、InputStream にとって致命的で、InputStream を不確定の状態にします。ストリームの状態を無視するか回復処理するかを決めるのは呼び出し側です。

定義:
インタフェース ObjectInput 内の readObject
戻り値:
ストリームから読み込まれたオブジェクト
例外:
ClassNotFoundException - 直列化されたオブジェクトのクラスが見つからなかった場合
InvalidClassException - 直列化で使用されるクラスになんらかの不具合があった場合
StreamCorruptedException - ストリームの制御情報に一貫性がない場合
OptionalDataException - プリミティブデータが、オブジェクトではなくストリームに見つかった場合
IOException - 入出力に関連した例外のどれかが発生した場合

readObjectOverride

protected Object readObjectOverride()
                             throws IOException,
                                    ClassNotFoundException
このメソッドは、引数なしの protected コンストラクタを使用して、ObjectOutputStream を構築した ObjectOutputStream の信頼できるサブクラスによって呼び出されます。サブクラスは、修飾子が final のオーバーライドメソッドを提供するとみなされます。

戻り値:
ストリームから読み込まれたオブジェクト
例外:
ClassNotFoundException - 直列化されたオブジェクトのクラスが見つからなかった場合
OptionalDataException - プリミティブデータが、オブジェクトではなくストリームに見つかった場合
IOException - 基本となるストリームの読み込み中に入出力エラーが発生した場合
導入されたバージョン:
1.2
関連項目:
ObjectInputStream(), readObject()

readUnshared

public Object readUnshared()
                    throws IOException,
                           ClassNotFoundException
ObjectInputStream から「共有されない」オブジェクトを読み込みます。このメソッドは、readObject と似ています。ただし、直後に readObject および readUnshared を呼び出し、この呼び出しが取得した直列化復元されたインスタンスに対する追加の参照を返すことはできません。具体的には、次のようになります。 readUnshared を呼び出してオブジェクトを直列化復元すると、返されるオブジェクトに関連付けられたストリームハンドルが無効になります。ただし、readUnshared から返される参照が一意であるとは限りません。直列化復元されたオブジェクトが readResolve メソッドを定義して、ほかの組織が見ることができるオブジェクトを返すことがあります。また、readUnshared がストリーム内のほかの場所や外部から取得できる Class オブジェクトまたは enum 定数を返すこともあります。直列化復元されたオブジェクトが readResolve メソッドを定義し、このメソッドの呼び出しによって配列が返される場合、readUnshared はその配列のシャロー複製を返します。これにより、基本となるデータストリームが処理されている場合でも、返される配列オブジェクトが一意であり、ObjectInputStream に対する readObject または readUnshared の呼び出しから 2 回目には取得できないようになります。  

このメソッドをオーバーライドする ObjectInputStream サブクラスは、SerializablePermission("enableSubclassImplementation") を持つセキュリティーコンテキスト内だけで構築できます。このアクセス権を持たないセキュリティーコンテキストでインスタンス化しようとすると、SecurityException がスローされます。

戻り値:
直列化復元オブジェクトへの参照
例外:
ClassNotFoundException - 直列化復元するオブジェクトのクラスが見つからなかった場合
StreamCorruptedException - ストリームの制御情報に一貫性がない場合
ObjectStreamException - 直列化復元するオブジェクトがすでにストリーム内にあった場合
OptionalDataException - ストリーム内の次のデータがプリミティブの場合
IOException - 直列化復元中に入出力エラーが発生した場合
導入されたバージョン:
1.4

defaultReadObject

public void defaultReadObject()
                       throws IOException,
                              ClassNotFoundException
現在のクラスの非 static および非 transient フィールドを、このストリームから読み込みます。このメソッドを呼び出すことができるのは、直列化復元されているクラスの readObject メソッドだけです。別の方法で呼び出された場合は NotActiveException をスローします。

例外:
ClassNotFoundException - 直列化されたオブジェクトのクラスが見つからなかった場合
IOException - 入出力エラーが発生した場合
NotActiveException - ストリームが現在オブジェクトを読み込んでいない場合

readFields

public ObjectInputStream.GetField readFields()
                                      throws IOException,
                                             ClassNotFoundException
ストリームから持続フィールドを読み込み、それらを名前を指定してアクセスできるようにします。

戻り値:
直列化復元されているオブジェクトの持続フィールドを表す GetField オブジェクト
例外:
ClassNotFoundException - 直列化されたオブジェクトのクラスが見つからなかった場合
IOException - 入出力エラーが発生した場合
NotActiveException - ストリームが現在オブジェクトを読み込んでいない場合
導入されたバージョン:
1.2

registerValidation

public void registerValidation(ObjectInputValidation obj,
                               int prio)
                        throws NotActiveException,
                               InvalidObjectException
オブジェクトグラフが返される前に検証されるべきオブジェクトを登録します。resolveObject に似ていますが、これらの検証はオブジェクトグラフ全体が再構築されたあとに呼び出される点が異なります。通常、readObject メソッドは、ストリームとともにオブジェクトを登録し、それによってオブジェクトのすべてが復元されたときに最終的な検証を実行できるようにします。

パラメータ:
obj - 検証のコールバックを受け取るオブジェクト
prio - コールバックの順序を制御する値。0 が適切なデフォルト値である。早くコールバックする場合は大きい番号を、あとでコールバックする場合は小さい番号を使う。同じ優先順位内では、コールバックの処理に特別な順序はない
例外:
NotActiveException - ストリームが現在オブジェクトを読み込んでいないため、コールバックを登録できない場合
InvalidObjectException - 検証オブジェクトが null の場合

resolveClass

protected Class<?> resolveClass(ObjectStreamClass desc)
                         throws IOException,
                                ClassNotFoundException
指定されたストリームクラスの記述に対応するローカルクラスをロードします。サブクラスは、このメソッドを実装して、クラスを代替ソースから取得できるようにすることができます。  

ObjectOutputStream 内で対応するメソッドは annotateClass です。このメソッドは、ストリームの一意のクラスそれぞれについて 1 回だけ呼び出されます。このメソッドは、代替のロード機構を使用するためにサブクラスによって実装することができますが、Class オブジェクトを返す必要があります。クラスオブジェクトが返されると、そのクラスが配列クラスでない場合は、クラスの serialVersionUID が、直列化されたクラスの serialVersionUID と比較されます。不一致があると、直列化復元に不具合が発生し、InvalidClassException がスローされます。  

ObjectInputStream 内のこのメソッドのデフォルト実装は、次の呼び出しの結果を返します。  

     Class.forName(desc.getName(), false, loader)
 
loader は、次のように決定されます。メソッドの宣言クラスがユーザー定義のクラスローダーによって定義されていて、リフレクトによる呼び出しの実装を目的に生成されていない場合、そのメソッドが現在のスレッドのスタック上に存在すると、loader は現在実行中のフレームにもっとも近いメソッドに対応するクラスローダーになります。そうでない場合、loadernull です。この呼び出しの結果が ClassNotFoundException で、渡された ObjectStreamClass インスタンスの名前がプリミティブ型または void に対する Java 言語のキーワードである場合は、そのプリミティブ型または void を表す Class オブジェクトが返されます。たとえば、"int" という名前の ObjectStreamClassInteger.TYPE に解決されます。そうでない場合は、このメソッドの呼び出し側に ClassNotFoundException がスローされます。

パラメータ:
desc - ObjectStreamClass クラスのインスタンス
戻り値:
desc に対応する Class オブジェクト
例外:
IOException - 通常の入出力関連の例外が発生した場合
ClassNotFoundException - 直列化されたオブジェクトのクラスが見つからなかった場合

resolveProxyClass

protected Class<?> resolveProxyClass(String[] interfaces)
                              throws IOException,
                                     ClassNotFoundException
プロキシクラス記述子で指定されたインタフェースを実装するプロキシクラスを返します。サブクラスはこのメソッドを実装してダイナミックプロキシクラスの記述子とともにストリームからカスタムデータを読み込み、インタフェースやプロキシクラスの代替ローディング機構を使用できるようにします。  

このメソッドはストリームの一意の各プロキシクラス記述子について 1 回だけ呼び出されます。  

ObjectOutputStream 内で対応するメソッドは annotateProxyClass です。このメソッドをオーバーライドする ObjectInputStream の指定されたサブクラスについては、ObjectOutputStream 内の対応するサブクラスの annotateProxyClass メソッドが、このメソッドが読み込むデータまたはオブジェクトをすべて書き込む必要があります。  

ObjectInputStream 内のこのメソッドのデフォルト実装は、interfaces パラメータに指定されたインタフェースに対する Class オブジェクトのリストを使用して Proxy.getProxyClass を呼び出した結果を返します。各インタフェース名 i に対する Class オブジェクトは、次の呼び出しによって返された値です。  

     Class.forName(i, false, loader)
 
loader は、実行スタックに格納される null でない最初のクラスローダーです。ただし、null でないクラスローダーがスタック上にない場合は、null です。このクラスローダーの選択は、resolveClass メソッドで使用されるものと同じです。解決されたインタフェースのすべてが public である場合は、この loader と同じ値が Proxy.getProxyClass に渡されるクラスローダーにもなります。一方、public でないインタフェースが存在する場合は、代わりにそれらのインタフェースのクラスローダーが渡されます。public でないインタフェースクラスローダーが複数検出された場合は、IllegalAccessError がスローされます。Proxy.getProxyClassIllegalArgumentException をスローした場合、resolveProxyClassIllegalArgumentException を含む ClassNotFoundException をスローします。

パラメータ:
interfaces - プロキシクラス記述子に直列化復元されたインタフェース名のリスト
戻り値:
指定されたインタフェースのプロキシクラス
例外:
IOException - 基本となる InputStream に例外が発生した場合
ClassNotFoundException - プロキシクラスまたは指定されたインタフェースがどれも見つからなかった場合
導入されたバージョン:
1.3
関連項目:
ObjectOutputStream.annotateProxyClass(Class)

resolveObject

protected Object resolveObject(Object obj)
                        throws IOException
このメソッドは、直列化復元の際に、ObjectInputStream の信頼できるサブクラスが、あるオブジェクトをほかのオブジェクトに置換できるようにします。オブジェクトの置換は、enableResolveObject が呼び出されるまでは行えません。enableResolveObject メソッドは、オブジェクトの解決を要求しているストリームが信頼できるかどうかを調べます。直列化可能オブジェクトへのすべての参照は、resolveObject に渡されます。オブジェクトの private 状態が意図せずに公開されることがないように、resolveObject を使うのは信頼できるストリームに限定されます。  

このメソッドは、オブジェクトが読み込まれたあと、readObject から復帰する前に呼び出されます。デフォルトの resolveObject メソッドは、同じオブジェクトを返します。  

サブクラスは、オブジェクトを置換するとき、置換されたオブジェクトと、参照が格納される各フィールドとの互換性を保つようにする必要があります。フィールドまたは配列要素の型のサブクラスではない型のオブジェクトは、例外を発生させることによって直列化を中断し、その結果オブジェクトは格納されません。  

このメソッドは、各オブジェクトが最初に検出されたときに 1 回だけ呼び出されます。これ以後検出されるそのオブジェクトへの参照は、新しいオブジェクトにリダイレクトされます。

パラメータ:
obj - 置換されるオブジェクト
戻り値:
置換されたオブジェクト
例外:
IOException - 通常の入出力関連の例外が発生した場合

enableResolveObject

protected boolean enableResolveObject(boolean enable)
                               throws SecurityException
ストリームから読み込まれたオブジェクトを置換できるようにします。置換が可能になると、resolveObject メソッドが、直列化復元される各オブジェクトについて呼び出されます。  

enable が true で、セキュリティーマネージャーがインストールされている場合、このメソッドはまずセキュリティーマネージャーの checkPermission メソッドをアクセス権 SerializablePermission("enableSubstitution") で呼び出し、ストリームから読み込まれたオブジェクトの置換をストリームが許可できるようにします。

パラメータ:
enable - 直列化復元される各オブジェクトについて resolveObject の使用を有効にする場合は true
戻り値:
このメソッドが呼び出される前の設定
例外:
SecurityException - セキュリティーマネージャーが存在し、その checkPermission メソッドが、ストリームから読み込まれたオブジェクトの置換をストリームが許可できるようにすることを拒否する場合
関連項目:
SecurityManager.checkPermission(java.security.Permission), SerializablePermission

readStreamHeader

protected void readStreamHeader()
                         throws IOException,
                                StreamCorruptedException
サブクラスが自身のストリームヘッダーの読み込みと検証を行えるようにするために提供されています。このメソッドは、マジック番号とバージョン番号を読み込みます。

例外:
IOException - 基本となる InputStream の読み込み中に入出力エラーが発生した場合
StreamCorruptedException - ストリームの制御情報に一貫性がない場合

readClassDescriptor

protected ObjectStreamClass readClassDescriptor()
                                         throws IOException,
                                                ClassNotFoundException
直列化ストリームからクラス記述子を読み込みます。このメソッドは、ObjectInputStream が直列化ストリームの次のアイテムとしてクラス記述子を要求すると呼び出されます。writeClassDescriptor メソッドをオーバーライドした ObjectOutputStream のサブクラスによって標準ではない形式で書き込まれたクラス記述子に読み込むために、ObjectInputStream のサブクラスがこのメソッドをオーバーライドします。デフォルトでは、このメソッドはクラス記述子をオブジェクト直列化仕様に定義された形式で読み込みます。

戻り値:
読み込まれたクラス記述子
例外:
IOException - 入出力エラーが発生した場合
ClassNotFoundException - クラス記述子表現に使用した直列化されたオブジェクトのクラスが見つからなかった場合
導入されたバージョン:
1.3
関連項目:
ObjectOutputStream.writeClassDescriptor(java.io.ObjectStreamClass)

read

public int read()
         throws IOException
データのバイトを読み込みます。このメソッドは、有効な入力がない場合はブロックします。

定義:
インタフェース ObjectInput 内の read
定義:
クラス InputStream 内の read
戻り値:
読み込まれたバイト。ストリームの終わりに達した場合は -1
例外:
IOException - 入出力エラーが発生した場合

read

public int read(byte[] buf,
                int off,
                int len)
         throws IOException
バイト配列に読み込みます。このメソッドは、入力の一部が利用できるようになるまでブロックします。バイトの長さを正確に読み込むには、java.io.DataInputStream.readFully を使用してください。

定義:
インタフェース ObjectInput 内の read
オーバーライド:
クラス InputStream 内の read
パラメータ:
buf - データの読み込み先のバッファ
off - データの開始オフセット
len - 読み込まれる最大バイト数
戻り値:
実際に読み込まれたバイト数。ストリームの終わりに達した場合は -1
例外:
IOException - 入出力エラーが発生した場合
関連項目:
DataInputStream.readFully(byte[],int,int)

available

public int available()
              throws IOException
ブロックせずに読み込むことができるバイト数を返します。

定義:
インタフェース ObjectInput 内の available
オーバーライド:
クラス InputStream 内の available
戻り値:
読み込み可能なバイト数
例外:
IOException - 基本となる InputStream の読み込み中に入出力エラーが発生した場合

close

public void close()
           throws IOException
入力ストリームを閉じます。ストリームに関連するすべてのリソースを解放するために呼び出す必要があります。

定義:
インタフェース Closeable 内の close
定義:
インタフェース ObjectInput 内の close
オーバーライド:
クラス InputStream 内の close
例外:
IOException - 入出力エラーが発生した場合

readBoolean

public boolean readBoolean()
                    throws IOException
boolean を読み込みます。

定義:
インタフェース DataInput 内の readBoolean
戻り値:
読み込まれる boolean 値
例外:
EOFException - ファイルの終わりに達した場合
IOException - ほかの入出力エラーが発生した場合

readByte

public byte readByte()
              throws IOException
8 ビットのバイトを読み込みます。

定義:
インタフェース DataInput 内の readByte
戻り値:
読み込まれる 8 ビットのバイト値
例外:
EOFException - ファイルの終わりに達した場合
IOException - ほかの入出力エラーが発生した場合

readUnsignedByte

public int readUnsignedByte()
                     throws IOException
符号なし 8 ビットバイトを読み込みます。

定義:
インタフェース DataInput 内の readUnsignedByte
戻り値:
読み込まれる 8 ビットのバイト値
例外:
EOFException - ファイルの終わりに達した場合
IOException - ほかの入出力エラーが発生した場合

readChar

public char readChar()
              throws IOException
16 ビットの char を読み込みます。

定義:
インタフェース DataInput 内の readChar
戻り値:
読み込まれる 16 ビットの char 値
例外:
EOFException - ファイルの終わりに達した場合
IOException - ほかの入出力エラーが発生した場合

readShort

public short readShort()
                throws IOException
16 ビットの short を読み込みます。

定義:
インタフェース DataInput 内の readShort
戻り値:
読み込まれる 16 ビットの short 値
例外:
EOFException - ファイルの終わりに達した場合
IOException - ほかの入出力エラーが発生した場合

readUnsignedShort

public int readUnsignedShort()
                      throws IOException
符号なし 16 ビットの short を読み込みます。

定義:
インタフェース DataInput 内の readUnsignedShort
戻り値:
読み込まれる 16 ビットの short 値
例外:
EOFException - ファイルの終わりに達した場合
IOException - ほかの入出力エラーが発生した場合

readInt

public int readInt()
            throws IOException
32 ビットの int を読み込みます。

定義:
インタフェース DataInput 内の readInt
戻り値:
読み込まれる 32 ビットの int 値
例外:
EOFException - ファイルの終わりに達した場合
IOException - ほかの入出力エラーが発生した場合

readLong

public long readLong()
              throws IOException
64 ビットの long を読み込みます。

定義:
インタフェース DataInput 内の readLong
戻り値:
読み込まれる 64 ビットの long 値
例外:
EOFException - ファイルの終わりに達した場合
IOException - ほかの入出力エラーが発生した場合

readFloat

public float readFloat()
                throws IOException
32 ビットの float を読み込みます。

定義:
インタフェース DataInput 内の readFloat
戻り値:
読み込まれる 32 ビットの float 値
例外:
EOFException - ファイルの終わりに達した場合
IOException - ほかの入出力エラーが発生した場合

readDouble

public double readDouble()
                  throws IOException
64 ビットの double を読み込みます。

定義:
インタフェース DataInput 内の readDouble
戻り値:
読み込まれる 64 ビットの double 値
例外:
EOFException - ファイルの終わりに達した場合
IOException - ほかの入出力エラーが発生した場合

readFully

public void readFully(byte[] buf)
               throws IOException
バイトを読み込みます。すべてのバイトが読み込まれるまでブロックします。

定義:
インタフェース DataInput 内の readFully
パラメータ:
buf - データの読み込み先のバッファ
例外:
EOFException - ファイルの終わりに達した場合
IOException - ほかの入出力エラーが発生した場合

readFully

public void readFully(byte[] buf,
                      int off,
                      int len)
               throws IOException
バイトを読み込みます。すべてのバイトが読み込まれるまでブロックします。

定義:
インタフェース DataInput 内の readFully
パラメータ:
buf - データの読み込み先のバッファ
off - データの開始オフセット
len - 読み込む最大バイト数
例外:
EOFException - ファイルの終わりに達した場合
IOException - ほかの入出力エラーが発生した場合

skipBytes

public int skipBytes(int len)
              throws IOException
バイトをスキップします。

定義:
インタフェース DataInput 内の skipBytes
パラメータ:
len - スキップするバイト数
戻り値:
実際にスキップされたバイト数
例外:
IOException - 入出力エラーが発生した場合

readLine

@Deprecated
public String readLine()
                throws IOException
推奨されていません。 このメソッドはバイトを正確に文字に変換しません。詳細および代替メソッドについては DataInputStream を参照してください。

\n、\r、\r\n、または EOF で終了する行を読み込みます。

定義:
インタフェース DataInput 内の readLine
戻り値:
行の文字列のコピー
例外:
IOException - 基本となる InputStream の読み込み中に入出力エラーが発生した場合

readUTF

public String readUTF()
               throws IOException
修正 UTF-8 形式の文字列を読み込みます。

定義:
インタフェース DataInput 内の readUTF
戻り値:
文字列
例外:
IOException - 基本となる InputStream の読み込み中に入出力エラーが発生した場合
UTFDataFormatException - 読み込みバイトが、有効な修正 UTF-8 形式でエンコードされた文字列以外であった場合

JavaTM Platform
Standard Ed. 6

バグの報告と機能のリクエスト
さらに詳しい API リファレンスおよび開発者ドキュメントについては、Java SE 開発者用ドキュメントを参照してください。開発者向けの詳細な解説、概念の概要、用語の定義、バグの回避策、およびコード実例が含まれています。

Copyright 2009 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。