全パッケージ クラス階層 このパッケージ 前項目 次項目 インデックス
クラスjava.io.ObjectInputStream
java.lang.Object
|
+----java.io.InputStream
|
+----java.io.ObjectInputStream
- public class ObjectInputStream
- extends InputStream
- implements ObjectInput, ObjectStreamConstants
ObjectInputStreamは、事前に ObjectOutputStreamを使って作成されたプリミティブデータとプリミティブオブジェクトを直列化復元します。 ObjectOutputStreamとObjectInputStreamは、 FileOutputStreamかFileInputStreamとともに 使えば、アプリケーションに、graphやオブジェクトのための安定したストレージを提供することができます。
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のすべてのメソッドを使って、自分の状態の書き込みと読み込みをすることができます。 発生するすべてのバージョン決定の操作は、オブジェクトの権限となります。
- 参照:
- DataInput, ObjectOutputStream, Serializable
-
ObjectInputStream(InputStream)
- 指定されたInputStreamから読み込むObjectInputStreamを作成する。
-
available()
- ブロックしないで読み込むことができるバイト数を返す。
-
close()
- 入力ストリームを閉じる。
-
defaultReadObject()
- 現在のクラスのnon-staticおよびnon-transientのフィールドをこのストリームから読み込む。
-
enableResolveObject(boolean)
- ストリームが、ストリームから読み込まれたオブジェクトの置き換えをできるようにする。
-
read()
- データのバイトを読み込む。
-
read(byte[], int, int)
- バイトの配列へ読み込む。
-
readBoolean()
- booleanを読み込む。
-
readByte()
- 8ビットのバイトを読み込む。
-
readChar()
- 16ビットのcharを読み込む。
-
readDouble()
- 64ビットのdoubleを読み込む。
-
readFloat()
- 32ビットのfloatを読み込む。
-
readFully(byte[])
- バイトを読み込み、すべてのバイトが読み込まれるまでブロックする。
-
readFully(byte[], int, int)
- バイトを読み込み、すべてのバイトが読み込まれるまでブロックする。
-
readInt()
- 32ビットのintを読み込む。
-
readLine()
- \n、 \r、 \r\nかEOFで終わる行への読み込みを行う。
-
readLong()
- 64ビットのlongを読み込む。
-
readObject()
- ObjectInputStreamからオブジェクトを読み込む。
-
readShort()
- 16ビットshortを読み込む。
-
readStreamHeader()
- サブクラスが、自分のストリームヘッダの読み込みと検査をする能力が、readStreamHeaderメソッドに提供される。
-
readUnsignedByte()
- サインされていない8ビットバイトを読み込む。
-
readUnsignedShort()
- サインされていない16ビットのshortを読み込む。
-
readUTF()
- UTFフォーマットの文字列を読み込む。
-
registerValidation(ObjectInputValidation, int)
- graphが返される前に、検証されるオブジェクトを登録する。
-
resolveClass(ObjectStreamClass)
- サブクラスはこのメソッドを実装して、クラスが代替のソースからフェッチされることを可能にすることができる。
-
resolveObject(Object)
- このメソッドは、 ObjectInputStreamの信頼性のあるサブクラスが、直列化復元のとき、あるオブジェクトを他のオブジェクトに置換することを可能にする。
-
skipBytes(int)
- バイトをスキップし、すべてのバイトがスキップされるまでブロックする。
ObjectInputStream
public ObjectInputStream(InputStream in) throws IOException, StreamCorruptedException
- 指定されたInputStreamから読み込むObjectInputStreamを生成します。
マジック番号とバージョン番号を含むストリームヘッダは、ストリームから読み込まれた後、検証されます。このメソッドは、対応するObjectOutputStreamがヘッダを書き込み、またフラッシュするまでブロックします。
- 例外: StreamCorruptedException
- マジック番号のバージョンが不正である。
- 例外: IOException
- 基礎となるストリームに例外が発生した。
readObject
public final Object readObject() throws OptionalDataException, ClassNotFoundException, IOException
- ObjectInputStreamからオブジェクトを読み込みます。オブジェクトのクラス、クラスのシグネチャ、そしてクラスのnon-transientおよびnon-staticフィールド とその上位型のすべての値が読み込まれます。あるクラスについての、デフォルトの直列化復元は、 writeObjectとreadObjectメソッドを使ってオーバーライドすることができます。このオブジェクトによって参照されるオブジェクトは中間的に読み込まれ、それによって、オブジェクトの同等のgraph全部が、 readObjectによって再構築されます。
ルートオブジェクトは、参照するフィールドとオブジェクトのすべてが復元された時、完全に復元されます。 この時点で、それらの登録された優先順位に基づいて、オブジェクト検証コールバックが実行されます。このコールバックは、(readObject特別メソッドの)オブジェクトによって、それらが個別に復元されるときに登録されます。
例外は、InputStreamによる問題や、直列化復元するべきではないクラスについてスローされます。すべての例外は、 InputStreamにとって致命的で、 InputStreamを不確定の状態にします。 ストリームの状態を無視するか復元するかを決めるのは呼び出し側です。
- 例外: ClassNotFoundException
- 直列化されたオブジェクトのクラスを見つけることができない。
- 例外: InvalidClassException
- 直列化によって使用されるクラスに何らかの不具合がある。
- 例外: StreamCorruptedException
- ストリームの制御情報が不安定である。
- 例外: OptionalDataException
- プリミティブデータが、オブジェクトではなくストリームに見つかった。
- 例外: IOException
- 通常の入力/出力関連の何らかの例外である。
defaultReadObject
public final void defaultReadObject() throws IOException, ClassNotFoundException, NotActiveException
- 現在のクラスのnon-staticおよびnon-transientのフィールドを、このストリームから読み込みます。これは、直列化復元されるクラスのreadObjectメソッドだけから呼び出すことが可能です。別の方法で呼び出された場合 NotActiveException をスローします。
- 例外: ClassNotFoundException
- 直列化されたオブジェクトを見つけることができなかった場合。
- 例外: IOException
- I/Oエラーが発生する場合。
- 例外: NotActiveException
- ストリームが、現在オブジェクトを読み込んでいない場合
registerValidation
public synchronized void registerValidation(ObjectInputValidation obj,
int prio) throws NotActiveException, InvalidObjectException
- Graphが返される前に検証されるオブジェクトを登録します。 この検証はresolveObjectと似ていますが、graphの全体が再構成された後に呼び出されます。通常、readObjectメソッドは、ストリームをともなうオブジェクトを登録し、それによって、オブジェクトのすべてが復元されたときに最終的な検証を実行できるようにします。
- パラメータ:
- obj -検証のコールバックを受け取るオブジェクト
- prio - コールバックの順序を管理する。;zeroが適切なデフォルト値である。
早くコールバックする場合は大きい番号を、後でコールバックする場合は小さい番号を使う。 同じ優先順位内では、コールバックの処理に特別な順序はない。
- 例外: NotActiveException
- ストリームは、現在オブジェクトを読み込んでいないためコールバックを登録することができない。
- 例外: InvalidObjectException
- 検証オブジェクトがnullである。
resolveClass
protected Class resolveClass(ObjectStreamClass v) throws IOException, ClassNotFoundException
- サブクラスはこのメソッドを実装して、クラスを代替ソースからフェッチすることを可能にすることができます。 ObjectOutputStreamの対応するメソッドはannotateClassです。このメソッドは、ストリームにおける独自のクラスそれぞれについて1度だけ呼び出されます。このメソッドは、代替のロードメカニズムを使用するために実装することができますが、クラスオブジェクトを返す必要があります。クラスオブジェクトが返されると、そのクラスのserialVersionUIDが直列化されたクラスのserialVersionUIDと比較されます。ミスマッチがあると、直列化復元に不具合が発生し、例外が呼び出されます。
デフォルトでは、 クラス名は、readObjectを呼び出した クラスと対比して決められます。
- 例外: ClassNotFoundException
- 直列化されたオブジェクトを見つけることができない場合。
resolveObject
protected Object resolveObject(Object obj) throws IOException
- このメソッドは、 ObjectInputStreamの信頼性のあるサブクラスが、直列化復元のときに、あるオブジェクトを他のオブジェクトに置換することを可能にします。 オブジェクトの置き換えは、enableResolveObjectが呼び出されるまではできません。 enableResolveObject メソッドは、オブジェクトを解決することをリクエストしているストリームが信頼できるかをチェックします。直列化できるオブジェクトへのすべての参照は、resolveObjectに渡されます。 オブジェクトのprivateな状態が知らないうちに漏洩しないようにするため、信頼性のあるストリームだけがresolveObjectを使うことができます。
このメソッドは、オブジェクトが読み込まれた後 、readObjectが返される前に呼び出されます。デフォルトのresolveObjectメソッドは、新しいオブジェクトだけを返します。
サブクラスはオブジェクトを置換するとき、 置換されたオブジェクトと、参照が格納される各フィールドとの互換性を保証する必要があります。フィールドまたは配列要素のサブクラスではない型のオブジェクトは、例外を呼び出すことによって直列化を異常終了させ、オブジェクトは格納されません。
このメソッドは、各オブジェクトに最初に相対したときに1度だけ呼び出されます。オブジェクトの、すべての後続の参照は、新しいオブジェクトにリダイレクトされます。
- 例外: IOException
- 通常の入力/出力の例外のいずれか。
enableResolveObject
protected final boolean enableResolveObject(boolean enable) throws SecurityException
- ストリームから読み込まれたオブジェクトの置換を可能にします。ストリームが信頼されるクラスであれば、置換を可能にすることができます。信頼性のあるクラスとは、classLoaderがnullのクラスをいいます。
置換が可能になった場合、 resolveObjectメソッドが、直列化復元される各オブジェクトについて呼び出されます。
- 例外: SecurityException
- このストリームオブジェクトのclassloaderがnullではない。
readStreamHeader
protected void readStreamHeader() throws IOException, StreamCorruptedException
- サブクラスが、自分のストリームヘッダの読み込みと検証をすることを可能にするため、readStreamHeaderメソッドが提供されています。サブクラスは、マジック番号とバージョン番号を読み込みます。
read
public int read() throws IOException
- データのバイトを読み込みます。可能な入力がない場合、このメソッドはブロックします。
- 返り値:
- 読み込まれたバイトか、ストリームの最後に達した場合には-1となる。
- 例外: IOException
- I/Oエラーが発生した場合
- オーバーライド:
- クラスInputStreamのread
read
public int read(byte data[],
int offset,
int length) throws IOException
- バイトの配列へ読み込みを行います。入力ができるようになるまで、このメソッドはブロックします。
- パラメータ:
- b - データの読み込み先のバッファ
- off -データの最初のオフセット
- len -読み込まれるバイトの最大値
- 返り値:
- 読み込まれるバイトの実際の数。ストリームの最後に到達した場合には-1が返される。
- 例外: IOException
- I/Oエラーが発生した場合
- オーバーライド:
- クラス InputStream の read
available
public int available() throws IOException
- ブロックなしに読み込むことができるバイト数を返します。
- 返り値:
- 利用できるバイト数
- オーバーライド:
- クラス InputStreamのavailable
close
public void close() throws IOException
- 入力ストリームを閉じます。ストリームに関連づけられたすべてのリソースを解放するために呼び出す必要があります。
- 例外: IOException
- I/Oエラーが発生した場合。
- オーバーライド:
- クラス InputStreamのclose
readBoolean
public boolean readBoolean() throws IOException
- booleanに読み込みます。
- 返り値:
- 読み込まれるboolean
- 例外: EOFException
- ファイルの最後に到達した場合。
- 例外: IOException
- 他の I/Oエラーが発生した場合。
readByte
public byte readByte() throws IOException
- 8ビットのバイトを読み込みます。
- 返り値:
- 読み込まれる8ビットバイト。
- 例外: EOFException
- ファイルの最後に到達した場合。
- 例外: IOException
- 他の I/Oエラーが発生した場合。
readUnsignedByte
public int readUnsignedByte() throws IOException
- サインされていない8ビットバイトを読み込みます。
- 返り値:
- 読み込まれる8ビットのバイト
- 例外: EOFException
- ファイルの最後に到達した場合。
- 例外: IOException
- 他の I/Oエラーが発生した場合。
readShort
public short readShort() throws IOException
- 16ビットのshortを読み込みます。
- 返り値:
- 読み込まれる16ビットのshort。
- 例外: EOFException
- ファイルの最後に到達した場合。
- 例外: IOException
- 他の I/Oエラーが発生した場合。
readUnsignedShort
public int readUnsignedShort() throws IOException
- サインされていない16ビットのshortを読み込みます。
- 返り値:
- 読み込まれる16ビットのshort。
- 例外: EOFException
- ファイルの最後に到達した場合。
- 例外: IOException
- 他の I/Oエラーが発生した場合。
readChar
public char readChar() throws IOException
- 16ビットのcharを読み込みます。
- 返り値:
- 読み込まれる16ビットのchar。
- 例外: EOFException
- ファイルの最後に到達した場合。
- 例外: IOException
- 他の I/Oエラーが発生した場合。
readInt
public int readInt() throws IOException
- 32ビットのintを読み込みます。
- 返り値:
- 読み込まれる32ビットの 整数型
- 例外: EOFException
- ファイルの最後に到達した場合。
- 例外: IOException
- 他のI/Oエラーが発生した場合。
readLong
public long readLong() throws IOException
- 64ビットのlongを読み込みます。
- 返り値:
- 読み込まれる64ビットのlong。
- 例外: EOFException
- ファイルの最後に到達した場合。
- 例外: IOException
- 他の I/Oエラーが発生した場合。
readFloat
public float readFloat() throws IOException
- 32ビットのfloatを読み込みます。
- 返り値:
- 読み込まれる32ビットのfloat。
- 例外: EOFException
- ファイルの最後に到達した場合。
- 例外: IOException
- 他の I/Oエラーが発生した場合。
readDouble
public double readDouble() throws IOException
- 64ビットのdoubleを読み込みます。
- 返り値:
- 読み込まれる64ビットのdouble。
- 例外: EOFException
- ファイルの最後に到達した場合。
- 例外: IOException
- 他の I/Oエラーが発生した場合。
readFully
public void readFully(byte data[]) throws IOException
- バイトを読み込みます。すべてのバイトが読み込まれるまでブロックします。
- パラメータ:
- b - データの読み込み先のバッファ
- 例外: EOFException
- ファイルの最後に到達した場合。
- 例外: IOException
- 他の I/Oエラーが発生した場合。
readFully
public void readFully(byte data[],
int offset,
int size) throws IOException
- バイトを読み込みます。すべてのバイトが読み込まれるまでブロックします。
- パラメータ:
- b - データの読み込み先のバッファ
- off -データの最初のオフセット
- len - 読み込むバイトの最大数
- 例外: EOFException
- ファイルの最後に到達した場合。
- 例外: IOException
- 他の I/Oエラーが発生した場合。
skipBytes
public int skipBytes(int len) throws IOException
- バイトをスキップします。すべてのバイトがスキップされるまでブロックします。
- パラメータ:
- n - スキップされるバイト数
- 返り値:
- スキップされるバイトの実際の数
- 例外: EOFException
- ファイルの最後に到達した場合。
- 例外: IOException
- 他の I/Oエラーが発生した場合。
readLine
public String readLine() throws IOException
- \n、 \r、 \r\nかEOFで終了する行を読み込みます。
- 返り値:
- 行の文字列のコピー
readUTF
public String readUTF() throws IOException
- UTFフォーマットの文字列を読み込みます。
- 返り値:
- 文字列
全パッケージ クラス階層 このパッケージ 前項目 次項目 インデックス