- java.lang.Object
-
- java.io.OutputStream
-
- java.io.ObjectOutputStream
-
- すべての実装されたインタフェース:
Closeable,DataOutput,Flushable,ObjectOutput,ObjectStreamConstants,AutoCloseable
public class ObjectOutputStream extends OutputStream implements ObjectOutput, ObjectStreamConstants
ObjectOutputStreamは、プリミティブ・データ型とJavaオブジェクトのグラフをOutputStreamに書き込みます。 これらのオブジェクトを読み込む(再構築する)にはObjectInputStreamを使います。 オブジェクトの持続的記憶は、そのストリームのためのファイルを使えば可能です。 ストリームがネットワーク・ソケット・ストリームの場合は、ほかのホストやほかのプロセス上でオブジェクトを再構築することもできます。ストリームに書き込めるのはjava.io.Serializableインタフェースをサポートするオブジェクトだけです。 各直列化可能オブジェクトのクラスは、クラスの名前とシグネチャ、オブジェクトのフィールドと配列、および初期オブジェクトから参照されるほかのすべてのオブジェクトのクロージャを含めてコード化されます。
オブジェクトをストリームに書き込むにはwriteObjectメソッドを使います。 Stringや配列を含む任意のオブジェクトがwriteObjectによって書き込まれます。 複数のオブジェクトまたはプリミティブも、ストリームへの書込みが可能です。 オブジェクトを読み込むときは、対応するObjectInputstreamから同じ型として、かつ書き込まれたときと同じ順序で読み込まなければいけません。
プリミティブ・データ型をストリームに書き込むには、DataOutputの適切なメソッドを使います。 Stringを書き込む場合はwriteUTFメソッドを使います。
オブジェクトのデフォルトの直列化メカニズムは、オブジェクトのクラス、クラスのシグネチャ、およびすべての非transientおよび非staticフィールドの値を書き込みます。 ほかのオブジェクトへの参照(transientおよびstaticフィールドは除く)があれば、これらのオブジェクトも書き込まれます。 単一オブジェクトへの多重参照は参照共有メカニズムによりエンコードされ、オブジェクトのグラフを、オリジナルが書き込まれたときの形状に復元することができます。
たとえば、ObjectInputStreamの例で読み込めるようにオブジェクトを書き込むには、次のようにします。
FileOutputStream fos = new FileOutputStream("t.tmp"); ObjectOutputStream oos = new ObjectOutputStream(fos); oos.writeInt(12345); oos.writeObject("Today"); oos.writeObject(new Date()); oos.close();直列化と直列化復元の際に特殊な扱いが必要なクラスでは、正確に次のようなシグネチャを持つ特殊なメソッドを実装する必要があります。
private void readObject(java.io.ObjectInputStream stream) throws IOException, ClassNotFoundException; private void writeObject(java.io.ObjectOutputStream stream) throws IOException private void readObjectNoData() throws ObjectStreamException;writeObjectメソッドは、その特定のクラスのオブジェクトの状態を書き込んで、対応するreadObjectメソッドがオブジェクトの状態を復元できるようにする役割を担います。 このメソッドは、オブジェクトのスーパー・クラスやサブクラスに属する状態に関与する必要はありません。 状態を保存するには、writeObjectメソッドを使って個々のフィールドをObjectOutputStreamに書き込むか、またはDataOutputがサポートするプリミティブ・データ型用のメソッドを使用します。
直列化では、java.io.Serializableインタフェースを実装しないオブジェクトのフィールドは書き込みません。 直列化可能でないオブジェクトのサブクラスを直列化可能にすることができます。 この場合、直列化可能でないクラスは、そのフィールドを初期化できるようにするため、引数なしのコンストラクタを持つ必要があります。 この場合、直列化可能でないクラスの状態を保存および復元するのは、サブクラスの責任になります。 そのクラスのフィールドがアクセス可能である(public、package、またはprotected)場合、あるいは状態の復元に利用できるsetメソッドやgetメソッドがある場合がしばしばあります。
writeObjectおよびreadObjectメソッドでNotSerializableExceptionをスローするように実装しておくと、オブジェクトの直列化を防止できます。 例外がObjectOutputStreamにキャッチされ、直列化処理が異常終了します。
Externalizableインタフェースを実装すると、オブジェクトの直列化された形式の内容および形式をオブジェクト側が完全に制御することが可能になります。 ExternalizableインタフェースのメソッドであるwriteExternalとreadExternalは、オブジェクトの状態を保存および復元するために呼び出されます。 これらのメソッドは、クラスによって実装された場合には、ObjectOutputとObjectInputのすべてのメソッドを使って、自身の状態の書き込みおよび読込みを行うことができます。 どのようなバージョンであっても処理できるようにするのは、オブジェクトの責任です。
enum定数の直列化は、通常の直列化可能または外部化可能オブジェクトとは異なります。 enum定数の直列化された形式を構成するのは、その名前だけです。定数のフィールド値は転送されません。 enum定数を直列化するには、その定数のnameメソッドによって返される文字列をObjectOutputStreamで書き込みます。 他の直列化可能または外部化可能オブジェクトと同様に、enum定数は直列化ストリームにその後出現する後方参照のターゲットとして機能できます。 enum定数を直列化するプロセスをカスタマイズすることはできません。enum型で定義された、クラス固有のwriteObjectメソッドおよびwriteReplaceメソッドは、直列化復元の間は無視されます。 同様に、serialPersistentFieldsまたはserialVersionUIDのフィールド宣言もすべて無視されます。すべてのenum型は0Lで固定されたserialVersionUIDを持ちます。
直列化可能フィールドおよび外部化可能データを除くプリミティブ・データは、ブロック・データ・レコードとしてObjectOutputStreamに書き込まれます。 ブロック・データ・レコードは、ヘッダーとデータで構成されます。 ブロック・データのヘッダーは、マーカーおよびヘッダーに続くバイト数で構成されます。 連続するプリミティブ・データの書込みは、1つのブロック・データ・レコードにマージされます。 ブロック・データ・レコードに使用されるブロック係数は1024バイトです。 各ブロック・データ・レコードは、1024バイトまで埋め込まれるか、ブロック・データ・モードの終了まで書き込まれます。 ObjectOutputStreamのメソッドwriteObject、defaultWriteObject、およびwriteFieldsを呼び出すと、最初に既存のブロック・データ・レコードが終了されます。
- 導入されたバージョン:
- 1.1
- 関連項目:
DataOutput,ObjectInputStream,Serializable,Externalizable, 「オブジェクト直列化仕様」のセクション2「オブジェクト出力クラス」
-
-
ネストされたクラスのサマリー
ネストされたクラス 修飾子と型 クラス 説明 static classObjectOutputStream.PutFieldObjectOutputに書き込まれる持続フィールドへのプログラムによるアクセスを提供します。
-
フィールドのサマリー
-
インタフェース java.io.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
-
-
コンストラクタのサマリー
コンストラクタ 修飾子 コンストラクタ 説明 protectedObjectOutputStream()ObjectOutputStreamを完全に実装し直すサブクラスが、ObjectOutputStreamのこの実装によって使用されたばかりのprivateデータを割り当てる必要がないようにする手段を提供します。ObjectOutputStream(OutputStream out)指定されたOutputStreamに書き込むObjectOutputStreamを作成します。
-
メソッドのサマリー
すべてのメソッド インスタンス・メソッド 具象メソッド 修飾子と型 メソッド 説明 protected voidannotateClass(Class<?> cl)サブクラスは、このメソッドを実装して、クラスのデータをストリームに保存できるようにすることができます。protected voidannotateProxyClass(Class<?> cl)サブクラスはこのメソッドを実装して、ダイナミック・プロキシ・クラスに対する記述子とともにカスタム・データをストリームに格納します。voidclose()ストリームを閉じます。voiddefaultWriteObject()現在のクラスの非staticおよび非transientのフィールドを、このストリームに書き込みます。protected voiddrain()ObjectOutputStream内のバッファリングされているデータをすべて排出します。protected booleanenableReplaceObject(boolean enable)ストリームがストリームに書き込まれたオブジェクトの置換を行うことを可能にします。voidflush()ストリームをフラッシュします。ObjectOutputStream.PutFieldputFields()ストリームに書き込まれる持続フィールドをバッファに格納するために使用されるオブジェクトを取得します。protected ObjectreplaceObject(Object obj)このメソッドは、直列化の際に、ObjectOutputStreamの信頼できるサブクラスが、あるオブジェクトをほかのオブジェクトに置換できるようにします。voidreset()Resetは、ストリームにすでに書き込まれているオブジェクトの状態を無効にします。voiduseProtocolVersion(int version)ストリームの書込み時に使用するストリーム・プロトコルのバージョンを指定します。voidwrite(byte[] buf)バイト配列を書き込みます。voidwrite(byte[] buf, int off, int len)バイト配列の一部を書き込みます。voidwrite(int val)バイトを書き込みます。voidwriteBoolean(boolean val)booleanを書き込みます。voidwriteByte(int val)8ビットのバイトを書き込みます。voidwriteBytes(String str)Stringをバイトの列として書き込みます。voidwriteChar(int val)16ビットのcharを書き込みます。voidwriteChars(String str)Stringをcharの列として書き込みます。protected voidwriteClassDescriptor(ObjectStreamClass desc)指定されたクラス記述子をObjectOutputStreamに書き込みます。voidwriteDouble(double val)64ビットのdoubleを書き込みます。voidwriteFields()バッファに格納されたフィールドをストリームに書き込みます。voidwriteFloat(float val)32ビットのfloatを書き込みます。voidwriteInt(int val)32ビットのintを書き込みます。voidwriteLong(long val)64ビットのlongを書き込みます。voidwriteObject(Object obj)指定されたオブジェクトをObjectOutputStreamに書き込みます。protected voidwriteObjectOverride(Object obj)サブクラスがデフォルトのwriteObjectメソッドをオーバーライドするために使用するメソッドです。voidwriteShort(int val)16ビットのshortを書き込みます。protected voidwriteStreamHeader()サブクラスが自身のヘッダーをストリームの前または後ろに追加できるように提供されています。voidwriteUnshared(Object obj)ObjectOutputStreamに「共有されない」オブジェクトを書き込みます。voidwriteUTF(String str)このStringのプリミティブ・データを修正UTF-8形式で書き込みます。-
クラス java.io.OutputStreamで宣言されたメソッド
nullOutputStream
-
-
-
-
コンストラクタの詳細
-
ObjectOutputStream
public ObjectOutputStream(OutputStream out) throws IOException
指定されたOutputStreamに書き込むObjectOutputStreamを作成します。 このコンストラクタは、直列化ストリーム・ヘッダーをベースとなるストリームに書き込みます。このストリームは呼出し側でただちにフラッシュしてください。ObjectInputStreamsを受け取ったコンストラクタは、ヘッダーを読み込むときにブロックするためです。セキュリティ・マネージャがインストールされている場合、ObjectOutputStream.putFieldsメソッドまたはObjectOutputStream.writeUnsharedメソッドをオーバーライドするサブクラスのコンストラクタによってSerializablePermission("enableSubclassImplementation")が直接または間接に呼び出されたときに、このコンストラクタはこのアクセス権を確認します。
- パラメータ:
out- 書込み先の出力ストリーム- 例外:
IOException- ストリーム・ヘッダーの書込み中に入出力エラーが発生した場合SecurityException- 信頼できないサブクラスが、セキュリティ上重要なメソッドを不正にオーバーライドした場合NullPointerException-outがnullである場合- 導入されたバージョン:
- 1.4
- 関連項目:
ObjectOutputStream(),putFields(),ObjectInputStream(InputStream)
-
ObjectOutputStream
protected ObjectOutputStream() throws IOException, SecurityExceptionObjectOutputStreamを完全に実装し直すサブクラスが、ObjectOutputStreamのこの実装によって使用されたばかりのprivateデータを割り当てる必要がないようにする手段を提供します。セキュリティ・マネージャがインストールされている場合、このメソッドはまずセキュリティ・マネージャの
checkPermissionメソッドをアクセス権SerializablePermission("enableSubclassImplementation")で呼び出し、サブクラス化を有効にできるようにします。- 例外:
SecurityException- セキュリティ・マネージャが存在し、そのcheckPermissionメソッドがサブクラス化を有効にすることを拒否した場合。IOException- このストリームの作成中に入出力エラーが発生した場合- 関連項目:
SecurityManager.checkPermission(java.security.Permission)、SerializablePermission
-
-
メソッドの詳細
-
useProtocolVersion
public void useProtocolVersion(int version) throws IOExceptionストリームの書込み時に使用するストリーム・プロトコルのバージョンを指定します。このルーチンは、現在のバージョンの直列化が、前のバージョンのストリーム形式と下位互換性のある形式で書き込めるようにするフックを提供します。
下位互換性のない形式がさらに導入されるのを防ぐためにあらゆる努力が行われますが、選択の余地のない場合もあります。
- パラメータ:
version- java.io.ObjectStreamConstantsからProtocolVersionを使用。- 例外:
IllegalStateException- オブジェクトが直列化されたあとに呼び出された場合。IllegalArgumentException- 渡されたバージョンが無効な場合。IOException- 入出力エラーが発生した場合- 導入されたバージョン:
- 1.2
- 関連項目:
ObjectStreamConstants.PROTOCOL_VERSION_1,ObjectStreamConstants.PROTOCOL_VERSION_2
-
writeObject
public final void writeObject(Object obj) throws IOException
指定されたオブジェクトをObjectOutputStreamに書き込みます。 オブジェクトのクラス、クラスのシグネチャ、クラスの非transientフィールドおよび非staticフィールドの値とそのすべてのスーパー・タイプが書き込まれます。 あるクラスについてデフォルトの直列化は、writeObjectメソッドとreadObjectメソッドを使ってオーバーライドすることができます。 このオブジェクトによって参照されるオブジェクトは中間的に書き込まれ、それによって、完全に同等なオブジェクト・グラフがObjectInputStreamによって再構築されます。例外は、OutputStreamに関する問題や、直列化すべきではないクラスについてスローされます。 すべての例外は、OutputStreamにとって致命的で、OutputStreamを不確定な状態にします。ストリームの状態を無視するか回復処理するかを決めるのは呼出し側です。
- 定義:
writeObject、インタフェースObjectOutput- パラメータ:
obj- 書き込まれるオブジェクト- 例外:
InvalidClassException- 直列化で使用されるクラスになんらかの不具合があった場合。NotSerializableException- 直列化の対象オブジェクトがjava.io.Serializableインタフェースを実装していない場合。IOException- ベースとなるOutputStreamが例外をスローした場合。
-
writeObjectOverride
protected void writeObjectOverride(Object obj) throws IOException
サブクラスがデフォルトのwriteObjectメソッドをオーバーライドするために使用するメソッドです。 このメソッドは、引数なしのprotectedコンストラクタを使用して、ObjectInputStreamを構築したObjectInputStreamの信頼できるサブクラスによって呼び出されます。 サブクラスは、修飾子がfinalのオーバーライド・メソッドを提供するとみなされます。- パラメータ:
obj- ベースとなるストリームに書き込まれるオブジェクト- 例外:
IOException- ベースとなるストリームの書込み中に入出力エラーが発生した場合- 導入されたバージョン:
- 1.2
- 関連項目:
ObjectOutputStream(),writeObject(Object)
-
writeUnshared
public void writeUnshared(Object obj) throws IOException
ObjectOutputStreamに「共有されない」オブジェクトを書き込みます。 このメソッドは、writeObjectと似ています。ただし、直列化されたインスタンスを指す逆参照としてではなく、ストリーム内で一意の新しいオブジェクトとして書き込みます。 具体的には、次のようになります。- writeUnsharedを使用して書き込まれたオブジェクトは、そのオブジェクトがストリームに書き込まれているかどうかにかかわらず、新しく書き込まれたオブジェクト(ストリームに書き込まれていないオブジェクト)として直列化されます。
- writeUnsharedによって以前に書き込まれたオブジェクトを書き込む際にwriteObjectを使用すると、以前のwriteUnshared操作は、別のオブジェクトの書き込みとして扱われます。 つまり、ObjectOutputStreamは、writeUnsharedの呼出しによって書き込まれたオブジェクト・データへの後方参照を生成しません。
このメソッドをオーバーライドするObjectOutputStreamサブクラスは、SerializablePermission("enableSubclassImplementation")を持つセキュリティ・コンテキスト内だけで構築できます。このアクセス権を持たないセキュリティ・コンテキストでインスタンス化しようとすると、SecurityExceptionがスローされます。
- パラメータ:
obj- ストリームに書き込むオブジェクト- 例外:
NotSerializableException- 直列化するグラフ内のオブジェクトがSerializableインタフェースを実装していない場合InvalidClassException- 直列化するオブジェクトのクラスに問題がある場合IOException- 直列化中に入出力エラーが発生した場合- 導入されたバージョン:
- 1.4
-
defaultWriteObject
public void defaultWriteObject() throws IOException現在のクラスの非staticおよび非transientのフィールドを、このストリームに書き込みます。 このメソッドを呼び出すことができるのは、直列化が行われているクラスのwriteObjectメソッドだけです。 別の方法で呼び出された場合はNotActiveExceptionをスローします。- 例外:
IOException- ベースとなるOutputStreamの書込み中に入出力エラーが発生した場合
-
putFields
public ObjectOutputStream.PutField putFields() throws IOException
ストリームに書き込まれる持続フィールドをバッファに格納するために使用されるオブジェクトを取得します。 フィールドは、writeFieldsメソッドが呼び出されたときにストリームに書き込まれます。- 戻り値:
- 直列化可能フィールドを保持しているクラスPutfieldのインスタンス
- 例外:
IOException- 入出力エラーが発生した場合- 導入されたバージョン:
- 1.2
-
writeFields
public void writeFields() throws IOExceptionバッファに格納されたフィールドをストリームに書き込みます。- 例外:
IOException- ベースとなるストリームの書込み中に入出力エラーが発生した場合NotActiveException- オブジェクトの状態を書き込むためにクラスのwriteObjectメソッドが呼び出されなかったときに呼び出された場合。- 導入されたバージョン:
- 1.2
-
reset
public void reset() throws IOExceptionResetは、ストリームにすでに書き込まれているオブジェクトの状態を無効にします。 新しいObjectOutputStreamと同じ状態にリセットされます。 ストリームの現在位置にマークが設定され、対応するObjectInputStreamも同じ位置にリセットされます。 以前にストリームに書き込まれたオブジェクトは、すでにストリーム内にあるとは解釈されません。 これらのオブジェクトは、ストリームに再度書き込まれます。- 例外:
IOException- オブジェクトを直列化中にreset()が呼び出された場合。
-
annotateClass
protected void annotateClass(Class<?> cl) throws IOException
サブクラスは、このメソッドを実装して、クラスのデータをストリームに保存できるようにすることができます。 デフォルトではこのメソッドは何も行いません。 ObjectInputStream内で対応するメソッドはresolveClassです。 このメソッドは、ストリームの一意のクラスそれぞれについて1回だけ呼び出されます。 その時点でクラス名とシグネチャはすでにストリームに書き込まれています。 このメソッドは、ObjectOutputStreamを自由に使って、適切と判断したクラスの任意の表現(クラス・ファイルのバイトなど)を保存できます。 ObjectInputStreamの対応するサブクラスのresolveClassメソッドは、annotateClassによって書き込まれたデータやオブジェクトを読み込み、使用しなければいけません。- パラメータ:
cl- カスタム・データに注釈を付けるクラス- 例外:
IOException- ベースとなるOutputStreamが例外をスローした場合。
-
annotateProxyClass
protected void annotateProxyClass(Class<?> cl) throws IOException
サブクラスはこのメソッドを実装して、ダイナミック・プロキシ・クラスに対する記述子とともにカスタム・データをストリームに格納します。このメソッドはストリームの一意の各プロキシ・クラス記述子について1回だけ呼び出されます。
ObjectOutputStream内のこのメソッドのデフォルト実装は、何も実行しません。ObjectInputStream内で対応するメソッドはresolveProxyClassです。 このメソッドをオーバーライドするObjectOutputStreamの指定されたサブクラスについては、ObjectInputStream内の対応するサブクラスのresolveProxyClassメソッドが、annotateProxyClassが書き込むデータまたはオブジェクトをすべて読み取る必要があります。- パラメータ:
cl- カスタム・データに注釈を付けるプロキシ・クラス- 例外:
IOException- ベースとなるOutputStreamが例外をスローした場合- 導入されたバージョン:
- 1.3
- 関連項目:
ObjectInputStream.resolveProxyClass(String[])
-
replaceObject
protected Object replaceObject(Object obj) throws IOException
このメソッドは、直列化の際に、ObjectOutputStreamの信頼できるサブクラスが、あるオブジェクトをほかのオブジェクトに置換できるようにします。 オブジェクトの置換は、enableReplaceObjectが呼び出されるまでは行えません。 enableReplaceObjectメソッドは、オブジェクトの置換を要求しているストリームが信頼できるかどうかを調べます。 直列化ストリームに書き込まれる各オブジェクトのうち最初に出現したものは、replaceObjectに渡されます。 それ以降のオブジェクトへの参照は、replaceObjectの元の呼出しによって返されたオブジェクトによって置換されます。 オブジェクトのprivate状態が意図せずに公開されることがないように、replaceObjectを使うのは信頼できるストリームに限定されます。ObjectOutputStream.writeObjectメソッドはObjectタイプのパラメータ(Serializableタイプとは異なる)を取り、直列化可能でないオブジェクトが直列化可能オブジェクトに置き換えられるようにします。
サブクラスは、オブジェクトを置換するとき、直列化復元実行時に相補的な置換が行われるようにするか、または置換されたオブジェクトと、参照が格納される各フィールドとの互換性を保つようにする必要があります。 フィールドまたは配列要素の型のサブクラスではない型のオブジェクトは、例外を発生させることによって直列化を中断し、その結果オブジェクトは格納されません。
このメソッドは、各オブジェクトが最初に検出されたときに1回だけ呼び出されます。 これ以後検出されるそのオブジェクトへの参照は、新しいオブジェクトにリダイレクトされます。 このメソッドは、置換されるオブジェクトまたは元のオブジェクトを返すことになります。
置換されるオブジェクトとしてnullを返すこともできますが、オリジナル・オブジェクトへの参照を含むクラスでは、nullではなくオブジェクトが返されることを仮定しているものがあり、この場合はNullReferenceExceptionがスローされます。
- パラメータ:
obj- 置き換えられるオブジェクト- 戻り値:
- 指定されたオブジェクトと置き換えられた代替オブジェクト
- 例外:
IOException- ベースとなるOutputStreamが例外をスローした場合。
-
enableReplaceObject
protected boolean enableReplaceObject(boolean enable) throws SecurityExceptionストリームがストリームに書き込まれたオブジェクトの置換を行うことを可能にします。 有効にすると、replaceObject(java.lang.Object)メソッドが直列化されるすべてのオブジェクトに対して呼び出されます。オブジェクトの置換が現在有効ではなく、
enableがtrueであり、セキュリティ・マネージャがインストールされている場合、このメソッドは、セキュリティ・マネージャcheckPermissionメソッドをSerializablePermission("enableSubstitution")アクセス許可で最初に呼び出して、呼び出し側がストリームによるオブジェクトの置換ストリームに書き込まれます。- パラメータ:
enable- 直列化されるすべてのオブジェクトに対してreplaceObjectの使用を有効にする場合はtrue- 戻り値:
- このメソッドが呼び出される前の設定
- 例外:
SecurityException- セキュリティ・マネージャが存在し、checkPermissionメソッドがストリームに書き込まれたオブジェクトの置換を行うことを拒否する場合。- 関連項目:
SecurityManager.checkPermission(java.security.Permission)、SerializablePermission
-
writeStreamHeader
protected void writeStreamHeader() throws IOExceptionサブクラスが自身のヘッダーをストリームの前または後ろに追加できるように提供されています。 このメソッドは、マジック番号とバージョン情報をストリームに書き込みます。- 例外:
IOException- ベースとなるストリームの書込み中に入出力エラーが発生した場合
-
writeClassDescriptor
protected void writeClassDescriptor(ObjectStreamClass desc) throws IOException
指定されたクラス記述子をObjectOutputStreamに書き込みます。 クラス記述子はストリームに書き込まれたオブジェクトのクラスを識別する際に使用します。 ObjectOutputStreamのサブクラスでこのメソッドをオーバーライドすることにより、直列化ストリームにクラス記述子を書き込む方法をカスタマイズできます。 その後、ObjectInputStream内の対応するメソッドreadClassDescriptorをオーバーライドして、カスタムのストリーム表現からクラス記述子を再構築するようにしてください。 デフォルトでは、このメソッドはクラス記述子をオブジェクト直列化仕様に定義された形式で書き込みます。このメソッドを呼び出すことができるのは、ObjectOutputStreamの
useProtocolVersionメソッドを呼び出すことによって設定される古い直列化ストリーム形式をObjectOutputStreamが使用していない場合のみである点に注意してください。 この直列化ストリームが古い形式(PROTOCOL_VERSION_1)を使用している場合、クラス記述子はオーバーライドまたはカスタマイズが不可能な方法で内部的に書き込まれます。- パラメータ:
desc- ストリームに書き込むクラス記述子- 例外:
IOException- 入出力エラーが発生した場合。- 導入されたバージョン:
- 1.3
- 関連項目:
ObjectInputStream.readClassDescriptor(),useProtocolVersion(int),ObjectStreamConstants.PROTOCOL_VERSION_1
-
write
public void write(int val) throws IOExceptionバイトを書き込みます。 このメソッドはバイトが実際に書き込まれるまでブロックします。- 定義:
write、インタフェースDataOutput- 定義:
write、インタフェースObjectOutput- 定義:
write、クラスOutputStream- パラメータ:
val- ストリームに書き込まれるバイト- 例外:
IOException- 入出力エラーが発生した場合。
-
write
public void write(byte[] buf) throws IOExceptionバイト配列を書き込みます。 このメソッドはバイトが実際に書き込まれるまでブロックします。- 定義:
write、インタフェースDataOutput- 定義:
write、インタフェースObjectOutput- オーバーライド:
write、クラスOutputStream- パラメータ:
buf- 書き込まれるデータ- 例外:
IOException- 入出力エラーが発生した場合。- 関連項目:
OutputStream.write(byte[], int, int)
-
write
public void write(byte[] buf, int off, int len) throws IOExceptionバイト配列の一部を書き込みます。- 定義:
write、インタフェースDataOutput- 定義:
write、インタフェースObjectOutput- オーバーライド:
write、クラスOutputStream- パラメータ:
buf- 書き込まれるデータoff- データ内の開始オフセットlen- 書き込まれるバイト数- 例外:
IOException- 入出力エラーが発生した場合。
-
flush
public void flush() throws IOExceptionストリームをフラッシュします。 このメソッドは、バッファリングされているすべての出力バイトを書き込んで、ベースとなるストリームを通してフラッシュします。- 定義:
flush、インタフェースFlushable- 定義:
flush、インタフェースObjectOutput- オーバーライド:
flush、クラスOutputStream- 例外:
IOException- 入出力エラーが発生した場合。
-
drain
protected void drain() throws IOExceptionObjectOutputStream内のバッファリングされているデータをすべて排出します。 フラッシュと似ていますが、ベースとなるストリームにフラッシュを伝播しません。- 例外:
IOException- ベースとなるストリームの書込み中に入出力エラーが発生した場合
-
close
public void close() throws IOExceptionストリームを閉じます。 ストリームに関連するすべてのリソースを解放するために、このメソッドを呼び出す必要があります。- 定義:
close、インタフェースAutoCloseable- 定義:
close、インタフェースCloseable- 定義:
close、インタフェースObjectOutput- オーバーライド:
close、クラスOutputStream- 例外:
IOException- 入出力エラーが発生した場合。
-
writeBoolean
public void writeBoolean(boolean val) throws IOExceptionbooleanを書き込みます。- 定義:
writeBoolean、インタフェースDataOutput- パラメータ:
val- 書き込まれるboolean- 例外:
IOException- ベースとなるストリームの書込み中に入出力エラーが発生した場合
-
writeByte
public void writeByte(int val) throws IOException8ビットのバイトを書き込みます。- 定義:
writeByte、インタフェースDataOutput- パラメータ:
val- 書き込まれるバイト値- 例外:
IOException- ベースとなるストリームの書込み中に入出力エラーが発生した場合
-
writeShort
public void writeShort(int val) throws IOException16ビットのshortを書き込みます。- 定義:
writeShort、インタフェースDataOutput- パラメータ:
val- 書き込まれるshort値- 例外:
IOException- ベースとなるストリームの書込み中に入出力エラーが発生した場合
-
writeChar
public void writeChar(int val) throws IOException16ビットのcharを書き込みます。- 定義:
writeChar、インタフェースDataOutput- パラメータ:
val- 書き込まれるchar値- 例外:
IOException- ベースとなるストリームの書込み中に入出力エラーが発生した場合
-
writeInt
public void writeInt(int val) throws IOException32ビットのintを書き込みます。- 定義:
writeInt、インタフェースDataOutput- パラメータ:
val- 書き込まれるint値- 例外:
IOException- ベースとなるストリームの書込み中に入出力エラーが発生した場合
-
writeLong
public void writeLong(long val) throws IOException64ビットのlongを書き込みます。- 定義:
writeLong、インタフェースDataOutput- パラメータ:
val- 書き込まれるlong値- 例外:
IOException- ベースとなるストリームの書込み中に入出力エラーが発生した場合
-
writeFloat
public void writeFloat(float val) throws IOException32ビットのfloatを書き込みます。- 定義:
writeFloat、インタフェースDataOutput- パラメータ:
val- 書き込まれるfloat値- 例外:
IOException- ベースとなるストリームの書込み中に入出力エラーが発生した場合
-
writeDouble
public void writeDouble(double val) throws IOException64ビットのdoubleを書き込みます。- 定義:
writeDouble、インタフェースDataOutput- パラメータ:
val- 書き込まれるdouble値- 例外:
IOException- ベースとなるストリームの書込み中に入出力エラーが発生した場合
-
writeBytes
public void writeBytes(String str) throws IOException
Stringをバイトの列として書き込みます。- 定義:
writeBytes、インタフェースDataOutput- パラメータ:
str- 書き込まれるバイトの文字列- 例外:
IOException- ベースとなるストリームの書込み中に入出力エラーが発生した場合
-
writeChars
public void writeChars(String str) throws IOException
Stringをcharの列として書き込みます。- 定義:
writeChars、インタフェースDataOutput- パラメータ:
str- 書き込まれるcharの文字列- 例外:
IOException- ベースとなるストリームの書込み中に入出力エラーが発生した場合
-
writeUTF
public void writeUTF(String str) throws IOException
このStringのプリミティブ・データを修正UTF-8形式で書き込みます。 ストリームにStringをプリミティブ・データとして書き込むことと、Objectとして書き込むことには大きな違いがあります。 writeObjectによって書き込まれるStringのインスタンスは、最初はStringとしてストリームに書き込まれます。 それ以降のwriteObject()の呼出しは、文字列への参照をストリームに書き込みます。- 定義:
writeUTF、インタフェースDataOutput- パラメータ:
str- 書き込まれる文字列- 例外:
IOException- ベースとなるストリームの書込み中に入出力エラーが発生した場合
-
-