JavaTM 2 Platform
Standard Ed. 5.0

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 仮想マシンに存在するクラスに確実にマッチするようにします。クラスは、標準の機構を使って必要に応じてロードされます。

ストリームから読み込むことができるのは、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 がスローされ、バイト単位の読み込みでは -1 が返され、プリミティブ読み込みでは 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 型は、serialVersionUID が 0L に固定されています。

導入されたバージョン:
JDK1.1
関連項目:
DataInput, ObjectOutputStream, Serializable, Object Serialization Specification, Section 3, Object Input Classes

入れ子のクラスの概要
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 メソッドが定義されていた場合、共有されているオブジェクトが返されることがあります。また、そのストリームのほかの場所や外部から取得した Class オブジェクトまたは enum 定数を返すこともあります。

ただし、復元されたオブジェクトが enum 定数または java.lang.Class のインスタンスではなく、readResolve メソッドを定義していない場合、readUnshared から返されるオブジェクト参照は常に一意です。元になるデータストリームが操作されている場合でも、それを作成した ObjectInputStream からオブジェクト参照を再度取得することはできません。この規則は、readUnshared から返されたベースレベルのオブジェクトだけに適用され、返されたオブジェクトグラフ内で参照されるサブオブジェクトには適用されません。

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

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

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 と比較されます。不一致があると、直列化復元に不具合が発生し、例外が呼び出されます。

デフォルトでは、クラス名は、readObject を呼び出したクラスと対応付けて解決されます。

パラメータ:
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 の呼び出し結果を返します。各インタフェース名 iClass オブジェクトが返されます。


     Class.forName(i, false, loader)
 
ここで loader は、実行スタックまでの最初の null でないクラス、または null でないクラスローダがスタック側 (resolveClass メソッドが使用する同じクラスローダの選択) にない場合は null です。解決されたインタフェースが public でない場合は、同じ値の loaderProxy.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 が直列化ストリームの次のアイテムとしてクラス記述子を要求すると呼び出されます。ObjectInputStream のサブクラスは、このメソッドをオーバーライドして標準ではない形式で (writeClassDescriptor メソッドをオーバーライドした ObjectOutputStream のサブクラスによって) 書き込まれたクラス記述子に読み込みます。デフォルトでは、このメソッドはクラス記述子をオブジェクト直列化仕様に定義された形式で読み込みます。

戻り値:
読み込まれたクラス記述子
例外:
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 - スキップするバイト数
戻り値:
実際にスキップされたバイト数
例外:
EOFException - ファイルの終わりに達した場合
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 2 Platform
Standard Ed. 5.0

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

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