クラスObjectInputStream

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

public class ObjectInputStream extends InputStream implements ObjectInput, ObjectStreamConstants
事前にObjectOutputStreamを使って作成されたプリミティブ・データとプリミティブ・オブジェクトを直列化復元します。

警告: 信頼できないデータの直列化復元は、本質的に危険であり、回避する必要があります。 「Java SEに対するセキュア・コーディングのガイドライン」の"直列化および直列化復元"セクションに従って、信頼できないデータを慎重に検証する必要があります。 「直列化フィルタリング」では、シリアル・フィルタの使いやすさに関するベスト・プラクティスについて説明します。

直列化復元攻撃を無効にするキーは、任意のクラスのインスタンスが直列化復元されないようにし、そのメソッドの直接または間接的な実行を防ぐことです。 ObjectInputFilterはフィルタの使用方法を示し、ObjectInputFilter.Configはフィルタおよびフィルタ・ファクトリの構成方法を示します。 各ストリームには、直列化復元中にクラスおよびリソース制限をチェックするオプションの直列化復元フィルタがあります。 JVM全体のフィルタ・ファクトリにより、ObjectInputStreamごとにフィルタを設定でき、ストリームから読み取られるすべてのオブジェクトをチェックできます。 ObjectInputStreamコンストラクタは、フィルタ・ファクトリを起動して、setObjectInputFilter(ObjectInputFilter)で更新または置換できる初期フィルタを選択します。

ObjectInputStreamにフィルタがある場合、ObjectInputFilterでは、クラス、配列の長さ、ストリーム内の参照数、深さおよび入力ストリームから消費されたバイト数が許可され、そうでない場合には、直列化復元を終了できます。

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

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

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

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

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

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

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

たとえば、ObjectOutputStreamの例で記述されたストリームから読み取る場合:

    try (FileInputStream fis = new FileInputStream("t.tmp");
         ObjectInputStream ois = new ObjectInputStream(fis)) {
        String label = (String) ois.readObject();
        LocalDateTime dateTime = (LocalDateTime) ois.readObject();
        // Use label and dateTime
    } catch (Exception ex) {
        // handle exception
    }

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

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型は0Lで固定されたserialVersionUIDを持ちます。

レコードの直列化は、通常の直列化可能オブジェクトまたは外部化可能オブジェクトとは異なります。 レコードの直列化復元中に、レコード標準コンストラクタが呼び出されてレコード・オブジェクトが構成されます。 readObjectやwriteObjectなどの特定の直列化関連メソッドは、直列化可能レコードでは無視されます。 詳細は、Javaオブジェクト直列化仕様セクション1.13、"レコードの直列化"」を参照してください。

導入されたバージョン:
1.1
外部仕様
関連項目:
  • ネストされたクラスのサマリー

    ネストされたクラス
    修飾子と型
    クラス
    説明
    static class 
    入力ストリームから読み込まれた持続フィールドへのアクセスを提供します。
  • フィールドのサマリー

    インタフェースで宣言されたフィールド ObjectStreamConstants

    baseWireHandle, PROTOCOL_VERSION_1, PROTOCOL_VERSION_2, SC_BLOCK_DATA, SC_ENUM, SC_EXTERNALIZABLE, SC_SERIALIZABLE, SC_WRITE_METHOD, SERIAL_FILTER_PERMISSION, 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
    修飾子と型
    フィールド
    説明
    static final int
    割り当てられる最初のワイヤー・ハンドルです。
    static final int
    ストリーム・プロトコルのバージョンです。
    static final int
    ストリーム・プロトコルのバージョンです。
    static final byte
    ObjectStreamClassフラグのビット・マスクです。
    static final byte
    ObjectStreamClassフラグのビット・マスクです。
    static final byte
    ObjectStreamClassフラグのビット・マスクです。
    static final byte
    ObjectStreamClassフラグのビット・マスクです。
    static final byte
    ObjectStreamClassフラグのビット・マスクです。
    システム全体のシリアル・フィルタの設定を有効にします。
    static final short
    ストリーム・ヘッダーへ書き込まれるマジック番号です。
    static final short
    ストリーム・ヘッダーへ書き込まれるバージョン番号です。
    readObjectおよびwriteObjectのオーバーライドを可能にします。
    直列化および直列化復元中のオブジェクトの置換を可能にします。
    static final byte
    新しい配列です。
    static final byte
    最初のタグ値です。
    static final byte
    任意指定のデータのブロックです。
    static final byte
    longブロック・データです。
    static final byte
    クラスへの参照です。
    static final byte
    新しいクラス記述子です。
    static final byte
    オブジェクトの任意指定のブロック・データの最後です。
    static final byte
    新しいenum定数です。
    static final byte
    書込み時の例外です。
    static final byte
    Long文字列です。
    static final byte
    最後のタグ値です。
    static final byte
    nullオブジェクト参照です。
    static final byte
    新しいオブジェクトです。
    static final byte
    新しいプロキシ・クラス記述子です。
    static final byte
    ストリームにすでに書き込まれたオブジェクトへの参照です。
    static final byte
    ストリーム・コンテキストをリセットします。
    static final byte
    新しい文字列です。
  • コンストラクタのサマリー

    コンストラクタ
    修飾子
    コンストラクタ
    説明
    protected
    ObjectInputStreamを完全に再実装するサブクラスが、ObjectInputStreamのこの実装によって使用されたばかりのprivateデータを割り当てる必要がないようにする手段を提供します。
     
    指定されたInputStreamから読み込むObjectInputStreamを作成します。
  • メソッドのサマリー

    修飾子と型
    メソッド
    説明
    int
    ブロックせずに読み込むことができるバイト数を返します。
    void
    この入力ストリームを閉じて、そのストリームに関連するすべてのシステム・リソースを解放します。
    void
    現在のクラスの非staticおよび非transientフィールドを、このストリームから読み込みます。
    protected boolean
    enableResolveObject(boolean enable)
    ストリームから読み取られたオブジェクトの置換をストリームで実行できるようにします。
    このストリームの直列化復元フィルタを返します。
    int
    データのバイトを読み込みます。
    int
    read(byte[] buf, int off, int len)
    バイト配列に読み込みます。
    boolean
    booleanを読み込みます。
    byte
    8ビットbyteを読み取ります。
    char
    16ビットcharを読み取ります。
    直列化ストリームからクラス記述子を読み込みます。
    double
    64ビットdoubleを読み取ります。
    ストリームから持続フィールドを読み込み、名前を指定してそれらにアクセスできるようにします。
    float
    32ビットfloatを読み取ります。
    void
    readFully(byte[] buf)
    バイトを読み込みます。すべてのバイトが読み込まれるまでブロックします。
    void
    readFully(byte[] buf, int off, int len)
    バイトを読み込みます。すべてのバイトが読み込まれるまでブロックします。
    int
    32ビットintを読み取ります。
    非推奨。
    このメソッドは、バイトを文字に正しく変換しません。
    long
    64ビットlongを読み取ります。
    final Object
    ObjectInputStreamからオブジェクトを読み込みます。
    protected Object
    このメソッドは、引数なしのprotectedコンストラクタを使用して、ObjectInputStreamを構築したObjectInputStreamの信頼できるサブクラスによって呼び出されます。
    short
    16ビットshortを読み取ります。
    protected void
    サブクラスが自身のストリーム・ヘッダーの読み込みと検証を行えるようにするために提供されています。
    ObjectInputStreamから「共有されない」オブジェクトを読み込みます。
    int
    符号なし8ビットbyteを読み取ります。
    int
    符号なしの16ビットshortを読み取ります。
    修正UTF-8形式の文字列を読み込みます。
    void
    オブジェクト・グラフが返される前に検証されるべきオブジェクトを登録します。
    protected Class<?>
    指定されたストリーム・クラスの記述に対応するローカル・クラスをロードします。
    protected Object
    このメソッドは、直列化復元の際に、ObjectInputStreamの信頼できるサブクラスが、あるオブジェクトをほかのオブジェクトに置換できるようにします。
    protected Class<?>
    resolveProxyClass(String[] interfaces)
    プロキシ・クラス記述子で指定されたインタフェースを実装するプロキシ・クラスを返します。サブクラスはこのメソッドを実装してダイナミック・プロキシ・クラスの記述子とともにストリームからカスタム・データを読み込み、インタフェースやプロキシ・クラスの代替ローディング・メカニズムを使用できるようにします。
    final void
    ストリームの直列化復元フィルタを設定します。
    int
    skipBytes(int len)
    バイトをスキップします。

    クラスで宣言されたメソッド InputStream

    mark, markSupported, nullInputStream, read, readAllBytes, readNBytes, readNBytes, reset, skip, skipNBytes, transferTo
    修飾子と型
    メソッド
    説明
    void
    mark(int readlimit)
    この入力ストリームの現在位置にマークを設定します。
    boolean
    この入力ストリームがmarkおよびresetメソッドをサポートしているかどうかを判定します。
    バイトを読み取らない新しいInputStreamを返します。
    int
    read(byte[] b)
    入力ストリームから数バイトを読み込み、それをバッファ配列bに格納します。
    byte[]
    入力ストリームから残りのすべてのバイトを読み取ります。
    int
    readNBytes(byte[] b, int off, int len)
    入力ストリームからリクエストされたバイト数を、指定されたバイト配列に読み取ります。
    byte[]
    readNBytes(int len)
    入力ストリームから指定のバイト数まで読み取ります。
    void
    このストリームを、この入力ストリームで最後にmarkメソッドが呼び出されたときの位置に再配置します。
    long
    skip(long n)
    この入力ストリームからnバイトのデータをスキップして破棄します。
    void
    skipNBytes(long n)
    この入力ストリームからのデータのnバイトに正確にスキップし、破棄します。
    long
    この入力ストリームからすべてのバイトを読み取り、指定された出力ストリームに読み込まれた順序でバイトを書き込みます。

    クラスオブジェクトで宣言されたメソッド

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    修飾子と型
    メソッド
    説明
    protected Object
    このオブジェクトのコピーを作成して、返します。
    boolean
    このオブジェクトと他のオブジェクトが等しいかどうかを示します。
    protected void
    削除予定のため非推奨: このAPI要素は、将来のバージョンで削除される可能性があります。
    最終決定は非推奨であり、将来のリリースで削除される可能性があります。
    final Class<?>
    このObjectの実行時クラスを返します。
    int
    このオブジェクトに対するハッシュ・コード値を返します。
    final void
    このオブジェクトのモニターで待機中のスレッドを1つ再開します。
    final void
    このオブジェクトのモニターで待機中のすべてのスレッドを再開します。
    オブジェクトの文字列表現を返します。
    final void
    現在のスレッドが目覚めるまで待機します。通常、notifiedまたはinterruptedです。
    final void
    wait(long timeoutMillis)
    現在のスレッドは、通常、notifiedまたはinterruptedであるか、一定のリアルタイムが経過するまで、目覚めるまで待機します。
    final void
    wait(long timeoutMillis, int nanos)
    現在のスレッドは、通常、notifiedまたはinterruptedであるか、一定のリアルタイムが経過するまで、目覚めるまで待機します。

    インタフェースで宣言されたメソッド ObjectInput

    read, skip
    修飾子と型
    メソッド
    説明
    int
    read(byte[] b)
    バイト配列に読み込みます。
    long
    skip(long n)
    入力をnバイトだけスキップします。
  • コンストラクタの詳細

    • ObjectInputStream

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

      コンストラクタは、現在のフィルタにnullを指定してObjectInputFilter.Config.getSerialFilterFactory()から返されたシリアル・フィルタ・ファクトリを起動し、リクエストされたフィルタに「静的JVM全体のフィルタ」を起動して、戻されるフィルタに直列化復元フィルタを初期化します。 シリアル・フィルタまたはシリアル・フィルタ・ファクトリ・プロパティが無効な場合は、IllegalStateExceptionがスローされます。 フィルタ・ファクトリのapplyメソッドが呼び出されると、ObjectInputStreamを構築できない実行時例外がスローされる場合があります。

      パラメータ:
      in - 読込み元の入力ストリーム
      スロー:
      StreamCorruptedException - ストリーム・ヘッダーが不正な場合
      IOException - ストリーム・ヘッダーの読込み中に入出力エラーが発生した場合
      IllegalStateException - シリアル・フィルタまたはシリアル・フィルタ・ファクトリ・プロパティが無効であるため、ObjectInputFilter.Configの初期化に失敗した場合。
      NullPointerException - innullである場合
      関連項目:
    • ObjectInputStream

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

      コンストラクタは、現在のフィルタにnullを指定してObjectInputFilter.Config.getSerialFilterFactory()から返されたシリアル・フィルタ・ファクトリを起動し、リクエストされたフィルタに「静的JVM全体のフィルタ」を起動して、戻されるフィルタに直列化復元フィルタを初期化します。 シリアル・フィルタまたはシリアル・フィルタ・ファクトリ・プロパティが無効な場合は、IllegalStateExceptionがスローされます。 フィルタ・ファクトリのapplyメソッドが呼び出されると、ObjectInputStreamを構築できない実行時例外がスローされる場合があります。

      スロー:
      IOException - このストリームの作成中に入出力エラーが発生した場合
      IllegalStateException - シリアル・フィルタまたはシリアル・フィルタ・ファクトリ・プロパティが無効であるため、ObjectInputFilter.Configの初期化に失敗した場合。
  • メソッドの詳細

    • readObject

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

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

      直列化復元フィルタは、nullでない場合、ルート・オブジェクトを再構築するために各オブジェクト(レギュラまたはクラス)読取りに対して呼び出されます。 詳細については、setObjectInputFilterを参照してください。

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

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

      protected Object readObjectOverride() throws IOException, ClassNotFoundException
      このメソッドは、引数なしのprotectedコンストラクタを使用して、ObjectInputStreamを構築したObjectInputStreamの信頼できるサブクラスによって呼び出されます。 サブクラスは、修飾子がfinalのオーバーライド・メソッドを提供するとみなされます。
      戻り値:
      ストリームから読み込まれたオブジェクト。
      スロー:
      ClassNotFoundException - 直列化されたオブジェクトのクラス定義が見つからなかった場合。
      OptionalDataException - プリミティブ・データが、オブジェクトではなくストリームに見つかった場合。
      IOException - ベースとなるストリームの読込み中に入出力エラーが発生した場合
      導入されたバージョン:
      1.2
      関連項目:
    • readUnshared

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

      直列化復元フィルタは、nullでない場合、ルート・オブジェクトを再構築するために各オブジェクト(レギュラまたはクラス)読取りに対して呼び出されます。 詳細については、setObjectInputFilterを参照してください。

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

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

      ストリームから持続フィールドを読み込み、名前を指定してそれらにアクセスできるようにします。
      戻り値:
      直列化復元されているオブジェクトの持続フィールドを表すGetFieldオブジェクト
      スロー:
      ClassNotFoundException - 直列化されたオブジェクトのクラスが見つからなかった場合。
      IOException - 入出力エラーが発生した場合。
      NotActiveException - ストリームが現在オブジェクトを読み込んでいない場合。
      導入されたバージョン:
      1.2
    • registerValidation

      public void registerValidation(ObjectInputValidation obj, int prio) throws NotActiveException, InvalidObjectException
      オブジェクト・グラフが返される前に検証されるべきオブジェクトを登録します。 resolveObjectに似ていますが、これらの検証はオブジェクト・グラフ全体が再構築されたあとに呼び出される点が異なります。 通常、readObjectメソッドは、ストリームとともにオブジェクトを登録し、それによってオブジェクトのすべてが復元されたときに最終的な検証を実行できるようにします。
      パラメータ:
      obj - 検証のコールバックを受け取るオブジェクト。
      prio - コールバックの順序を制御します。デフォルトはゼロです。 早くコールバックする場合は大きい番号を、あとでコールバックする場合は小さい番号を使う。 同じ優先順位内では、コールバックの処理に特別な順序はない。
      スロー:
      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「プラットフォーム・クラス・ローダー」です。 この呼出しの結果が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は、現在のスレッドのスタック(現在実行中のメソッドから開始)の最初のクラス・ローダーで、「プラットフォーム・クラス・ローダー」もその祖先もありません。それ以外の場合、loader「プラットフォーム・クラス・ローダー」です。 解決されたインタフェースのすべてがpublicである場合は、このloaderと同じ値がProxy.getProxyClassに渡されるクラス・ローダーにもなります。一方、publicでないインタフェースが存在する場合は、代わりにそれらのインタフェースのクラス・ローダーが渡されます。publicでないインタフェース・クラス・ローダーが複数検出された場合は、IllegalAccessErrorがスローされます。 Proxy.getProxyClassからIllegalArgumentExceptionがスローされると、resolveProxyClassはそのIllegalArgumentExceptionを含むClassNotFoundExceptionをスローします。

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

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

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

      サブクラスがオブジェクトを置換する場合、置換されたオブジェクトが、参照が格納されるすべてのフィールドと互換性があることを確認する必要があります。 型がフィールドまたは配列要素の型のサブクラスでないオブジェクトは、例外を生成して直列化復元を中止し、オブジェクトの格納されません。

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

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

      protected boolean enableResolveObject(boolean enable)
      ストリームから読み取られたオブジェクトの置換をストリームで実行できるようにします。 有効にすると、デシリアライズされるすべてのオブジェクトに対してresolveObject(Object)メソッドがコールされます。
      パラメータ:
      enable - 直列化復元される各オブジェクトについてresolveObjectの使用を有効にする場合はtrue
      戻り値:
      このメソッドが呼び出される前の設定
    • 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
      関連項目:
    • read

      public int read() throws IOException
      データのバイトを読み込みます。 このメソッドは、有効な入力がない場合はブロックします。
      定義:
      read、インタフェースObjectInput
      定義:
      read、クラスInputStream
      戻り値:
      読み込まれたバイト。ストリームの終わりに達した場合は -1。
      スロー:
      IOException - 入出力エラーが発生した場合。
    • read

      public int read(byte[] buf, int off, int len) throws IOException
      バイト配列に読み込みます。 このメソッドは、入力の一部が利用できるようになるまでブロックします。 バイトの長さを正確に読み込むには、java.io.DataInputStream.readFullyを使用してください。
      定義:
      read、インタフェースObjectInput
      オーバーライド:
      read、クラスInputStream
      パラメータ:
      buf - データの読込み先のバッファ
      off - 転送先配列の開始オフセットbuf
      len - 読み込まれる最大バイト数
      戻り値:
      バッファに読み込まれたバイトの合計数。ストリームの終わりに達してデータがない場合は-1
      スロー:
      NullPointerException - bufnullの場合。
      IndexOutOfBoundsException - offが負の場合、lenが負の場合、またはlenbuf.length - offより大きい場合。
      IOException - 入出力エラーが発生した場合。
      関連項目:
    • available

      public int available() throws IOException
      ブロックせずに読み込むことができるバイト数を返します。
      定義:
      available、インタフェースObjectInput
      オーバーライド:
      available、クラスInputStream
      戻り値:
      読込み可能なバイト数。
      スロー:
      IOException - ベースとなるInputStreamの読込み中に入出力エラーが発生した場合
    • close

      public void close() throws IOException
      この入力ストリームを閉じて、そのストリームに関連するすべてのシステム・リソースを解放します。
      定義:
      close、インタフェースAutoCloseable
      定義:
      close、インタフェースCloseable
      定義:
      close、インタフェースObjectInput
      オーバーライド:
      close、クラスInputStream
      スロー:
      IOException - 入出力エラーが発生した場合。
    • readBoolean

      public boolean readBoolean() throws IOException
      booleanを読み込みます。
      定義:
      readBoolean、インタフェースDataInput
      戻り値:
      読み込まれるboolean値
      スロー:
      EOFException - ファイルの終わりに達した場合。
      IOException - ほかの入出力エラーが発生した場合。
    • readByte

      public byte readByte() throws IOException
      8ビットbyteを読み取ります。
      定義:
      readByte、インタフェースDataInput
      戻り値:
      8ビットのbyteの読み取り。
      スロー:
      EOFException - ファイルの終わりに達した場合。
      IOException - ほかの入出力エラーが発生した場合。
    • readUnsignedByte

      public int readUnsignedByte() throws IOException
      符号なし8ビットbyteを読み取ります。
      定義:
      readUnsignedByte、インタフェースDataInput
      戻り値:
      8ビットのbyteの読み取り。
      スロー:
      EOFException - ファイルの終わりに達した場合。
      IOException - ほかの入出力エラーが発生した場合。
    • readChar

      public char readChar() throws IOException
      16ビットcharを読み取ります。
      定義:
      readChar、インタフェースDataInput
      戻り値:
      16ビットのcharの読み取り。
      スロー:
      EOFException - ファイルの終わりに達した場合。
      IOException - ほかの入出力エラーが発生した場合。
    • readShort

      public short readShort() throws IOException
      16ビットshortを読み取ります。
      定義:
      readShort、インタフェースDataInput
      戻り値:
      16ビットのshortの読み取り。
      スロー:
      EOFException - ファイルの終わりに達した場合。
      IOException - ほかの入出力エラーが発生した場合。
    • readUnsignedShort

      public int readUnsignedShort() throws IOException
      符号なしの16ビットshortを読み取ります。
      定義:
      readUnsignedShort、インタフェースDataInput
      戻り値:
      16ビットのshortの読み取り。
      スロー:
      EOFException - ファイルの終わりに達した場合。
      IOException - ほかの入出力エラーが発生した場合。
    • readInt

      public int readInt() throws IOException
      32ビットintを読み取ります。
      定義:
      readInt、インタフェースDataInput
      戻り値:
      32ビットのintegerの読み取り。
      スロー:
      EOFException - ファイルの終わりに達した場合。
      IOException - ほかの入出力エラーが発生した場合。
    • readLong

      public long readLong() throws IOException
      64ビットlongを読み取ります。
      定義:
      readLong、インタフェースDataInput
      戻り値:
      読み取り64ビットlong。
      スロー:
      EOFException - ファイルの終わりに達した場合。
      IOException - ほかの入出力エラーが発生した場合。
    • readFloat

      public float readFloat() throws IOException
      32ビットfloatを読み取ります。
      定義:
      readFloat、インタフェースDataInput
      戻り値:
      32ビットのfloatの読み取り。
      スロー:
      EOFException - ファイルの終わりに達した場合。
      IOException - ほかの入出力エラーが発生した場合。
    • readDouble

      public double readDouble() throws IOException
      64ビットdoubleを読み取ります。
      定義:
      readDouble、インタフェースDataInput
      戻り値:
      64ビットのdoubleの読み取り。
      スロー:
      EOFException - ファイルの終わりに達した場合。
      IOException - ほかの入出力エラーが発生した場合。
    • readFully

      public void readFully(byte[] buf) throws IOException
      バイトを読み込みます。すべてのバイトが読み込まれるまでブロックします。
      定義:
      readFully、インタフェースDataInput
      パラメータ:
      buf - データの読込み先のバッファ
      スロー:
      NullPointerException - bufnullである場合。
      EOFException - ファイルの終わりに達した場合。
      IOException - ほかの入出力エラーが発生した場合。
    • readFully

      public void readFully(byte[] buf, int off, int len) throws IOException
      バイトを読み込みます。すべてのバイトが読み込まれるまでブロックします。
      定義:
      readFully、インタフェースDataInput
      パラメータ:
      buf - データの読込み先のバッファ
      off - データ配列bufへの開始オフセット
      len - 読み込む最大バイト数
      スロー:
      NullPointerException - bufnullである場合。
      IndexOutOfBoundsException - offが負の値の場合、lenが負の値の場合、あるいはlenbuf.length - offより大きい場合
      EOFException - ファイルの終わりに達した場合。
      IOException - ほかの入出力エラーが発生した場合。
    • skipBytes

      public int skipBytes(int len) throws IOException
      バイトをスキップします。
      定義:
      skipBytes、インタフェースDataInput
      パラメータ:
      len - スキップするバイト数
      戻り値:
      実際にスキップされたバイト数。
      スロー:
      IOException - 入出力エラーが発生した場合。
    • readLine

      @Deprecated public String readLine() throws IOException
      非推奨。
      このメソッドは、バイトを文字に正しく変換しません。詳細および代替方法については、DataInputStreamを参照してください。
      \n、\r、\r\n、またはEOFで終了する行を読み込みます。
      定義:
      readLine、インタフェースDataInput
      戻り値:
      行の文字列のコピー。
      スロー:
      IOException - ベースとなるInputStreamの読込み中に入出力エラーが発生した場合
    • readUTF

      public String readUTF() throws IOException
      修正UTF-8形式の文字列を読み込みます。
      定義:
      readUTF、インタフェースDataInput
      戻り値:
      文字列。
      スロー:
      IOException - ベースとなるInputStreamの読込み中に入出力エラーが発生した場合
      UTFDataFormatException - 読込みバイトが、有効な修正UTF-8形式でエンコードされた文字列以外であった場合
    • getObjectInputFilter

      public final ObjectInputFilter getObjectInputFilter()
      このストリームの直列化復元フィルタを返します。 フィルタは、constructorまたはsetObjectInputFilterの最新起動によるJVM-wide filter factoryの起動結果です。
      戻り値:
      ストリームの直列化復元フィルタ。nullの場合があります
      導入されたバージョン:
      9
    • setObjectInputFilter

      public final void setObjectInputFilter(ObjectInputFilter filter)
      ストリームの直列化復元フィルタを設定します。 直列化復元フィルタは、current filterおよびfilterパラメータを使用して「JVM全体のフィルタ・ファクトリ」を起動することで返されるフィルタに設定されます。 現在のフィルタは、「JVM全体のフィルタ・ファクトリ」を呼び出して「ObjectInputStreamコンストラクタ」に設定されており、nullである可能性があります。setObjectInputFilter(ObjectInputFilter)このメソッド} は、ストリームからオブジェクトを読み取る前に一度だけ呼び出すことができます(たとえば、readObject()またはreadUnshared()を呼び出します)。

      non-nullフィルタをnullフィルタに置換することはできません。 current filternon-nullの場合、フィルタ・ファクトリから返される値はnon-nullである必要があります。

      フィルタのcheckInputメソッドは、ストリーム内のクラスおよび参照ごとにコールされます。 フィルタは、クラスの一部またはすべて、配列の長さ、参照数、グラフの深さ、および入力ストリームのサイズをチェックできます。 深さは、直列化復元されるグラフのルートの読取りおよび直列化復元される現在のオブジェクトの読取りから始まる、ネストされたreadObjectコールの数です。 参照の数は、読み込まれている現在のオブジェクトを含む、ストリームからすでに読み取られているオブジェクトおよび参照の累積数です。 フィルタは、プリミティブではなく、ストリームからオブジェクトを読み取る場合にのみ呼び出されます。

      フィルタがStatus.REJECTEDnullを返すか、RuntimeExceptionをスローする場合、アクティブなreadObjectまたはreadUnsharedInvalidClassExceptionをスローします。それ以外の場合、直列化復元は中断されずに続行されます。

      実装要件:
      フィルタ(nullではない場合)は、ストリーム内のオブジェクト(レギュラまたはクラス)ごとにreadObjectおよびreadUnshared中に呼び出されます。 文字列はプリミティブとして扱われ、フィルタを起動しません。 フィルタは次の目的で呼び出されます:
      • 各オブジェクト参照はストリーム(クラスはnull、arrayLengthは -1)から以前に直列化復元され、
      • 各正規のクラス(クラスはnullではなく、arrayLengthは -1です。)、
      • ストリーム(ストリーム内のクラスによって実装されるインタフェースに対してコールされません)で明示的に参照される各インタフェース・クラス
      • 動的プロキシの各インタフェースと動的プロキシ・クラス自体(クラスはnullではなく、arrayLengthは -1です。)、
      • 各配列は、配列の型と長さ(classは配列型、arrayLengthはリクエストされた長さです)を使用してフィルタリングされ、
      • クラスのreadResolveメソッドで置換される各オブジェクトは、置換オブジェクトのクラス(null以外の場合)を使用してフィルタ処理され、配列の場合はarrayLength、それ以外の場合は -1を使用してフィルタ処理されます。
      • resolveObjectで置換される各オブジェクトは、置換オブジェクトのクラス(null以外)を使用してフィルタ処理され、配列の場合はarrayLength、それ以外の場合は -1を使用してフィルタ処理されます。
      checkInputメソッドが呼び出されると、現在のクラス、配列の長さ、ストリームからすでに読み取られている現在の参照数、readObjectまたはreadUnsharedへのネストされたコールの深さ、および入力ストリームから消費された実装に依存するバイト数へのアクセス権が付与されます。

      readObjectまたはreadUnsharedをコールするたびに、オブジェクトの読取り前に深さが1ずつ増加し、通常または例外的に戻される前に1ずつ減少します。 深さは1から始まり、ネストされたオブジェクトごとに増加し、ネストされたコールごとに減少します。 ストリーム内の参照数は1から始まり、オブジェクトの読取り前に増加します。

      パラメータ:
      filter - フィルタはnullの場合があります
      スロー:
      IllegalStateException - オブジェクトが読み取られた場合、current filterがnullでないときにフィルタ・ファクトリがnullを返すか、フィルタがすでに設定されている場合。
      導入されたバージョン:
      9