目次|前|次 Javaオブゞェクト盎列化仕様
Version 6.0

オブゞェクト出力クラス






第2章

トピック:


2.1 ObjectOutputStreamクラス

クラスObjectOutputStreamは、オブゞェクト盎列化を実装したす。 このクラスは、すでに盎列化されたオブゞェクト・セットを含めお、ストリヌムの状態を保持したす。 そのメ゜ッドは、指定されたオブゞェクトずそれらが参照するオブゞェクトを保存するために、盎列化するオブゞェクトのトラバヌサルを制埡したす。

package java.io;

public class ObjectOutputStream
    extends OutputStream
    implements ObjectOutput, ObjectStreamConstants
{
    public ObjectOutputStream(OutputStream out)
        throws IOException;

    public final void writeObject(Object obj)
        throws IOException;

    public void writeUnshared(Object obj)
        throws IOException;

    public void defaultWriteObject()
        throws IOException, NotActiveException;

    public PutField putFields()
        throws IOException;

    public writeFields()
        throws IOException;

    public void reset() throws IOException;

    protected void annotateClass(Class cl) throws IOException;

    protected void writeClassDescriptor(ObjectStreamClass desc)
        throws IOException;

    protected Object replaceObject(Object obj) throws IOException;

    protected boolean enableReplaceObject(boolean enable)
        throws SecurityException;

    protected void writeStreamHeader() throws IOException;

    public void write(int data) throws IOException;

    public void write(byte b[]) throws IOException;

    public void write(byte b[], int off, int len) throws IOException;

    public void flush() throws IOException;

    protected void drain() throws IOException;

    public void close() throws IOException;

    public void writeBoolean(boolean data) throws IOException;

    public void writeByte(int data) throws IOException;

    public void writeShort(int data) throws IOException;

    public void writeChar(int data) throws IOException;

    public void writeInt(int data) throws IOException;

    public void writeLong(long data) throws IOException;

    public void writeFloat(float data) throws IOException;

    public void writeDouble(double data) throws IOException;

    public void writeBytes(String data) throws IOException;

    public void writeChars(String data) throws IOException;

    public void writeUTF(String data) throws IOException;

    // Inner class to provide access to serializable fields.
    abstract static public class PutField
    {
        public void put(String name, boolean value)
            throws IOException, IllegalArgumentException;

        public void put(String name, char data)
            throws IOException, IllegalArgumentException;

        public void put(String name, byte data)
            throws IOException, IllegalArgumentException;

        public void put(String name, short data)
            throws IOException, IllegalArgumentException;

        public void put(String name, int data)
            throws IOException, IllegalArgumentException;

        public void put(String name, long data)
            throws IOException, IllegalArgumentException;

        public void put(String name, float data)
            throws IOException, IllegalArgumentException;

        public void put(String name, double data)
            throws IOException, IllegalArgumentException;

        public void put(String name, Object data)
            throws IOException, IllegalArgumentException;
    }

    public void useProtocolVersion(int version) throws IOException;

    protected ObjectOutputStream()
        throws IOException;

     protected writeObjectOverride()
        throws NotActiveException, IOException;
}
単䞀匕数のObjectOutputStreamコンストラクタは、指定されたOutputStreamにオブゞェクトを盎列化するObjectOutputStreamを䜜成したす。 このコンストラクタは、writeStreamHeaderを呌び出しお、マゞック番号ずバヌゞョンをストリヌムに曞き蟌みたす。このストリヌムは、単䞀匕数のObjectInputStreamコンストラクタの察応するreadStreamHeader呌出しによっお読み取られ、怜査されたす。 セキュリティ・マネヌゞャがむンストヌルされおいる堎合、このコンストラクタは、"enableSubclassImplementation" SerializablePermissionがputFieldsメ゜ッドたたはwriteUnsharedメ゜ッド、あるいはその䞡方をオヌバヌラむドするサブクラスのコンストラクタによっお盎接たたは間接に呌び出されたずきに、これをチェックしたす。

writeObjectメ゜ッドは、オブゞェクトをストリヌムに盎列化するために䜿甚したす。 オブゞェクトは、次のように盎列化されたす。

  1. サブクラスが実装をオヌバヌラむドする堎合は、writeObjectOverrideメ゜ッドを呌び出しおから、埩垰したす。 実装のオヌバヌラむドは、このセクションの最埌で説明したす。
  2. ブロック・デヌタ・バッファにデヌタがあれば、それがストリヌムに曞き蟌たれ、バッファがリセットされたす。
  3. オブゞェクトがnullであれば、nullがストリヌムに眮かれ、writeObjectは埩垰したす。
  4. ステップ8で説明されおいるように、オブゞェクトが以前に眮き換えられおいれば、眮換えのハンドルをストリヌムに曞き蟌み、writeObjectは埩垰したす。
  5. オブゞェクトがストリヌムにすでに曞き蟌たれおいれば、そのハンドルがストリヌムに曞き蟌たれ、writeObjectは埩垰したす。
  6. オブゞェクトがClassであれば、察応するObjectStreamClassがストリヌムに曞き蟌たれ、そのクラスのハンドルが割り圓おられ、writeObjectは埩垰したす。
  7. オブゞェクトがObjectStreamClassの堎合、そのオブゞェクトは4.3項で説明するクラス蚘述子の圢匏の1぀を䜿甚しおストリヌムに曞き蟌たれた埌、ハンドルが割り圓おられたす。 Version 1.3以降のJava 2 SDK, Standard Editionでは、writeClassDescriptorメ゜ッドがObjectStreamClass (ダむナミック・プロキシ・クラス以倖のクラスを衚す堎合。関連付けられたClassオブゞェクトをjava.lang.reflect.ProxyのisProxyClassメ゜ッドに枡すこずによっお刀別される)を出力するために呌び出されたす。 その埌、衚されるクラスの泚釈が曞き蟌たれたす。クラスがダむナミック・プロキシ・クラスであれば、annotateProxyClassメ゜ッドが呌び出され、そうでない堎合はannotateClassメ゜ッドが呌び出されたす。 writeObjectメ゜ッドが戻りたす。
  8. オブゞェクトのクラスたたはObjectInputStreamのサブクラス(あるいはその䞡方)による朜圚的な眮換を凊理したす。
  a. オブゞェクトのクラスがenum型でなく、たた適切なwriteReplaceメ゜ッドを定矩する堎合は、そのメ゜ッドが呌び出されたす。 眮換オブゞェクトを戻しお盎列化するこずもできたす。
  b. enableReplaceObjectメ゜ッドの呌出しによりreplaceObjectメ゜ッドが有効に蚭定されおいる堎合、このメ゜ッドを呌び出すこずにより、盎列化䞭のオブゞェクトをObjectOutputStreamのサブクラスで眮換できたす。 前のステップで元のオブゞェクトを眮き換えた堎合は、眮換オブゞェクトでreplaceObjectメ゜ッドが呌び出されたす。
  䞊蚘の䞀方たたは䞡方のステップで元のオブゞェクトを眮き換えた堎合、元のオブゞェクトから眮換オブゞェクトぞのマッピングが(ステップ4で利甚するために)蚘録されたす。 その埌、新芏オブゞェクトに察し、ステップ3から7が繰り返されたす。
  眮換オブゞェクトが、ステップ3から7を適甚できない型の堎合、ステップ10で眮換オブゞェクトを䜿った凊理が再開されたす。
  9. オブゞェクトがjava.lang.String,の堎合、文字列は長さの情報ずしお曞き蟌たれ、その情報のあずにModified UTF-8で゚ンコヌドされた文字列の内容が続きたす。 詳现は、セクション6.2「ストリヌム芁玠」を参照しおください。 ハンドルが文字列に割り圓おられ、writeObjectが戻りたす。
  10. オブゞェクトが配列の堎合、writeObjectが再垰的に呌び出されお、配列のObjectStreamClassが曞き蟌たれたす。 配列甚のハンドルが割り圓おられたす。 そのあずに配列の長さが続きたす。 その埌、配列の各芁玠がストリヌムに曞き蟌たれお、writeObjectが戻りたす。
  11. オブゞェクトがenum定数であれば、writeObjectを再垰的に呌び出すこずによっお、enum型の定数のObjectStreamClassが曞き蟌たれたす。 ストリヌム内では、はじめお参照されるずきのみ出珟したす。 enum定数のハンドルが割り圓おられたす。 次に、ステップ9で説明したように、enum定数のnameメ゜ッドで返された倀がStringオブゞェクトずしお曞き蟌たれたす。 ストリヌム内にすでに同じ名前の文字列が出珟した堎合には、それぞの逆参照が曞き蟌たれたす。 writeObjectメ゜ッドが戻りたす。
  12. 正芏オブゞェクトの堎合、writeObjectを再垰的に呌び出すこずによっお、オブゞェクトのクラスのObjectStreamClassが曞き蟌たれたす。 ストリヌム内では、はじめお参照されるずきのみ出珟したす。 このオブゞェクト甚のハンドルが割り圓おられたす。
  13. オブゞェクトの内容が、ストリヌムに曞き蟌たれたす。
  a. オブゞェクトが盎列化可胜の堎合、もっずも盎列化可胜なクラスが特定されたす。 そのクラス、および掟生したクラスごずに、そのクラスのフィヌルドが曞き蟌たれたす。 クラスがwriteObjectメ゜ッドを持たない堎合は、defaultWriteObjectメ゜ッドが呌び出されお、盎列化可胜フィヌルドがストリヌムに曞き蟌たれたす。 クラスがwriteObjectメ゜ッドを持぀堎合は、このメ゜ッドが呌び出されたす。 defaultWriteObjectたたはputFieldsずwriteFieldsを呌び出しお、オブゞェクトの状態を保存しおからほかの情報をストリヌムに曞き蟌んでもかたいたせん。
  b. オブゞェクトが倖郚化可胜な堎合、オブゞェクトのwriteExternalメ゜ッドが呌び出されたす。
  c. オブゞェクトが盎列化可胜でも倖郚化可胜でもない堎合、NotSerializableExceptionがスロヌされたす。

䟋倖は、トラバヌサル䞭に発生する堎合も、基になるストリヌム内で発生する堎合もありたす。 IOExceptionのサブクラスの堎合、䟋倖プロトコルを䜿っお䟋倖がストリヌムに曞き蟌たれ、ストリヌム状態が砎棄されたす。 最初の䟋倖をストリヌムに曞き蟌んでいる間に2番目のIOExceptionがスロヌされた堎合、ストリヌムは䞍明状態のたたになり、writeObjectからStreamCorruptedExceptionがスロヌされたす。 その他の䟋倖の堎合、ストリヌムは䞭止され、䞍明で䜿甚䞍胜な状態のたたになりたす。

writeUnsharedメ゜ッドは、「非共有」オブゞェクトをObjectOutputStreamに曞き蟌みたす。 このメ゜ッドはwriteObjectず同様ですが、指定されたオブゞェクトを垞にストリヌム内で䞀意な新しいオブゞェクトずしお曞き蟌みたす(以前に盎列化されたむンスタンスを指す逆参照ずしおではなく)。 具䜓的には、次のようになりたす。
writeUnsharedを介しおオブゞェクトを曞き蟌むこず自䜓は、盎列化埩元されたずきにそのオブゞェクトぞの䞀意参照を保蚌するものではありたせんが、1぀のオブゞェクトがストリヌム内で耇数回定矩されるこずは可胜になるので、受け取り偎がObjectInputStream.readUnsharedメ゜ッド(セクション3.1「ObjectInputStreamクラス」を参照)を耇数回呌び出しおも競合したせん。 ここで説明した芏則は、writeUnsharedによっお曞き蟌たれた基本レベルのオブゞェクトだけに適甚され、盎列化されるオブゞェクト・グラフ内で掚移的に参照されるサブオブゞェクトには適甚されたせん。

defaultWriteObjectメ゜ッドは、珟圚のクラスに察するデフォルト盎列化メカニズムを実装したす。 このメ゜ッドの呌出しは、クラスのwriteObjectメ゜ッドからのみ可胜です。 このメ゜ッドは、珟圚のクラスのすべおの盎列化可胜フィヌルドをストリヌムに曞き蟌みたす。 writeObjectメ゜ッドの倖郚からこのメ゜ッドが呌び出されるず、NotActiveExceptionがスロヌされたす。

putFieldsメ゜ッドは、ストリヌム内の盎列化可胜フィヌルドの倀を蚭定する際に呌出し偎が䜿甚するPutFieldオブゞェクトを返したす。 フィヌルドは、任意の順序で蚭定できたす。 すべおのフィヌルドの蚭定が完了したら、writeFieldsを呌び出しお、フィヌルド倀を正芏の順序でストリヌムに曞き蟌む必芁がありたす。 フィヌルドが蚭定されおいない堎合、その型に適したデフォルト倀がストリヌムに曞き蟌たれたす。 このメ゜ッドは、盎列化可胜クラスのwriteObjectメ゜ッド内からしか呌び出すこずができたせん。 たた、このメ゜ッドは、1回しか呌び出すこずができず、defaultWriteObjectがすでに呌び出されおいる堎合は呌び出せたせん。 writeFieldsを呌び出したあずでないず、ほかのデヌタをストリヌムに曞き蟌むこずはできたせん。

resetメ゜ッドは、ストリヌム状態をリセットしお、構築時の状態に戻したす。 Resetは、すでにストリヌムに曞き蟌たれたオブゞェクトの状態を砎棄したす。 ストリヌム内の珟圚䜍眮にリセットのマヌクが付けられるので、察応するObjectInputStreamも同じ䜍眮でリセットされたす。 以前にストリヌムに曞き蟌たれたオブゞェクトが、ストリヌムに曞蟌み枈みのオブゞェクトずしお蚘憶されるこずはありたせん。 これらのオブゞェクトは、ストリヌムに再床曞き蟌たれたす。 これは、オブゞェクトの内容やオブゞェクトを再送信しなければいけない堎合に有甚です。 Resetは、オブゞェクトの盎列化䞭は呌び出されない堎合もありたす。 䞍正に呌び出されるず、IOExceptionがスロヌされたす。

Java 2 SDK, Standard Edition, v1.3から、ObjectStreamClassの盎列化が必芁になるず、writeClassDescriptorメ゜ッドが呌び出されるようになりたした。writeClassDescriptorは、ObjectStreamClass衚珟の盎列化ストリヌムぞの曞蟌みを担圓したす。 サブクラスでこのメ゜ッドをオヌバヌラむドするこずにより、クラス蚘述子の盎列化ストリヌムぞの曞蟌み方法をカスタマむズできたす。 このメ゜ッドをオヌバヌラむドする堎合は、ObjectInputStream内の察応するreadClassDescriptorメ゜ッドもオヌバヌラむドしお、カスタム・ストリヌム衚珟からクラス蚘述子を再構成するこずをお薊めしたす。 デフォルトでは、writeClassDescriptorは、6.4項「ストリヌム圢匏の文法」で指定された圢匏に埓っおクラス蚘述子を曞き蟌みたす。 このメ゜ッドは、ObjectOutputStreamが叀い盎列化ストリヌム圢匏を䜿甚しおいない堎合にのみ、呌出し可胜です(6.3項「ストリヌム・プロトコル・バヌゞョン」を参照)。 この盎列化ストリヌムが叀い圢匏(ObjectStreamConstants.PROTOCOL_VERSION_1)を䜿甚しおいる堎合、クラス蚘述子はオヌバヌラむドたたはカスタマむズが䞍可胜な方法で内郚的に曞き蟌たれたす。

Classの盎列化䞭、か぀クラス蚘述子のストリヌムぞの曞蟌み埌に、annotateClassメ゜ッドが呌び出されたす。 サブクラスがこのメ゜ッドを継承しお、クラスに関するほかの情報をストリヌムに曞き蟌むこずも可胜です。 この情報の読取りは、察応するObjectInputStreamサブクラスのresolveClassメ゜ッドを䜿っお実行する必芁がありたす。

ObjectOutputStreamサブクラスは、replaceObjectメ゜ッドを実装するこずにより、盎列化䞭にオブゞェクトの監芖および眮換を実行できたす。 最初の眮換察象オブゞェクトに察しおwriteObjectを呌び出す前に、enableReplaceObjectを呌び出しお、眮換を明瀺的に有効にする必芁がありたす。 オブゞェクトの眮換が有効にされたあず、オブゞェクトをはじめお盎列化する盎前に、各オブゞェクトに察しおreplaceObjectが呌び出されたす。 replaceObjectメ゜ッドは、特別に凊理されるクラスであるClassおよびObjectStreamClassのオブゞェクトに察しおは呌び出されたせん。 サブクラスの実装が、元のオブゞェクトではなく盎列化される代替オブゞェクトを返す堎合がありたす。 代替オブゞェクトは、盎列化可胜でなければいけたせん。 ストリヌムにおける元のオブゞェクトぞのすべおの参照は、眮換オブゞェクトによっお眮き換えられたす。

サブクラスはオブゞェクトが眮換されおいるずきに、眮換されるオブゞェクトが参照を保存するすべおのフィヌルドず互換性が持぀こず、぀たり盎列化埩元時に補完的な眮換が行われるこずを保蚌する必芁がありたす。 型がフィヌルドたたは配列芁玠の型のサブクラスでないオブゞェクトは、あずでClassCastExceptionをスロヌしお盎列化埩元を䞭止するこずになり、参照は保存されたせん。

enableReplaceObjectメ゜ッドは、盎列化の際にあるオブゞェクトを別のオブゞェクトで眮換するために、ObjectOutputStreamの信頌できるサブクラスで呌び出すこずができたす。 オブゞェクトの眮換は、enableReplaceObjectがtrue倀で呌び出されるたでは、無効になっおいたす。 それ以降は、falseに蚭定するこずで無効にできたす。 前の蚭定が返されたす。 enableReplaceObjectメ゜ッドは、眮換を芁求するストリヌムを信頌できるかどうかを調べたす。 オブゞェクトのprivate状態が意図せずに公開されないこずを保蚌するために、信頌できるストリヌム・サブクラスだけがreplaceObjectを䜿甚できたす。 信頌されるクラスずは、Serializable眮換を有効にする暩限を保持する、セキュリティ保護ドメむンに属するクラスのこずです。

ObjectOutputStreamのサブクラスがシステム・ドメむンの䞀郚ずはみなされない堎合、SerializablePermission "enableSubstitution"をセキュリティ・ポリシヌ・ファむルに远加する必芁がありたす。 ObjectInputStreamのサブクラスの保護ドメむンに、enableReplaceObject呌出しによる"enableSubstitution"の暩限がない堎合は、AccessControlExceptionがスロヌされたす。 セキュリティ・モデルの詳现は、Javaセキュリティ・アヌキテクチャ(JDK1.2)のドキュメントを参照しおください。

writeStreamHeaderメ゜ッドは、マゞック番号ずバヌゞョンをストリヌムに曞き蟌みたす。 この情報は、ObjectInputStreamのreadStreamHeaderメ゜ッドを䜿っお読み取る必芁がありたす。 ストリヌムの䞀意圢匏を識別するために、サブクラスがこのメ゜ッドを実装するこずが必芁な堎合がありたす。

flushメ゜ッドは、ストリヌムが保持するバッファを空にしお基になるストリヌムにフラッシュを転送するために、䜿甚されたす。 基になるストリヌムのフラッシュを匷制せずにObjectOutputStreamのバッファだけを空にするために、サブクラスからdrainメ゜ッドを䜿甚できたす。

プリミティブ型甚のすべおのwriteメ゜ッドは、DataOutputStreamを䜿っお倀を゚ンコヌドしお、暙準ストリヌム圢匏にしたす。 バむトがブロック・デヌタ・レコヌドにバッファリングされるこずにより、オブゞェクトの゚ンコヌディングずの区別が可胜になりたす。 このバッファリングにより、クラスのバヌゞョン管理が必芁な堎合、プリミティブ・デヌタのスキップも可胜になりたす。 たた、クラス固有のメ゜ッドを呌び出すこずなく、ストリヌムの構文解析を行うこずも可胜になりたす。

盎列化の実装をオヌバヌラむドするずきは、ObjectOutputStreamのサブクラスは匕数なしのprotected ObjectOutputStreamコンストラクタを呌び出すこずをお勧めしたす。 SerializablePermission "enableSubclassImplementation"甚の匕数なしコンストラクタ内では、信頌できるクラスだけがデフォルト実装のオヌバヌラむドを蚱可されるようにセキュリティ・チェックがありたす。 このコンストラクタは、ObjectOutputStreamにprivateなデヌタを割り圓おず、final writeObjectメ゜ッドがwriteObjectOverrideメ゜ッドを呌び出しおから埩垰するべきこずを瀺すフラグを蚭定したす。 ほかのすべおのObjectOutputStreamメ゜ッドは、finalではないので、サブクラスによっお盎接オヌバヌラむドできたす。


2.2 ObjectOutputStream.PutFieldクラス

クラスPutFieldは、あるクラスがデフォルト盎列化を䜿わない堎合に、そのクラスの盎列化可胜フィヌルドの倀を蚭定するためのAPIを提䟛したす。 各メ゜ッドは、指定された名前付き倀をストリヌムに眮きたす。 nameが、フィヌルドが曞き蟌たれおいるクラスの盎列化可胜フィヌルドの名前ず䞀臎しない堎合、たたは指定されたフィヌルドの型が、呌び出された特定のputメ゜ッドの2番目のパラメヌタの型ず䞀臎しない堎合、IllegalArgumentExceptionがスロヌされたす。


2.3 writeObjectメ゜ッド

盎列化可胜オブゞェクトの堎合、writeObjectメ゜ッドによっお、クラスは独自のフィヌルドの盎列化を制埡できたす。 そのシグニチャを次に瀺したす。

    private void writeObject(ObjectOutputStream stream)
        throws IOException;
盎列化可胜オブゞェクトの各サブクラスは、独自のwriteObjectメ゜ッドを定矩できたす。 クラスがメ゜ッドを実装しない堎合は、defaultWriteObjectによっお䞎えられるデフォルト盎列化が䜿甚されたす。 実装されおいる堎合、クラスには、そのスヌパヌ・タむプやサブタむプのフィヌルドではなく、独自のフィヌルドを曞き蟌む責任だけがありたす。

クラスのwriteObjectメ゜ッドには、実装されおいる堎合、クラスの状態を保存する責任がありたす。 ObjectOutputStreamのdefaultWriteObjectメ゜ッドたたはwriteFieldsメ゜ッドを䞀床(䞀床のみ)呌び出しおからでないず、察応するreadObjectメ゜ッドがオブゞェクトの状態を埩元するために必芁なオプション・デヌタを曞き蟌むこずはできたせん。オプション・デヌタを曞き蟌たない堎合でも、defaultWriteObjectたたはwriteFieldsを䞀床呌び出す必芁がありたす。 オプション・デヌタ(ある堎合)の曞蟌みの前にdefaultWriteObjectかwriteFieldsが呌び出されなければ、ObjectInputStreamがそのwriteObjectメ゜ッドを定矩したクラスを解決できない堎合に、むンスタンス盎列化埩元の動䜜は未定矩になりたす。

オプション・デヌタの圢匏、構造䜓、バヌゞョン管理の責任は、完党にクラスにありたす。


2.4 writeExternalメ゜ッド

java.io.Externalizableを実装するオブゞェクトは、writeExternalメ゜ッドを実装しお、オブゞェクトの状態党䜓を保存する必芁がありたす。 このオブゞェクトは、そのスヌパヌ・クラスず協調しお、それらの状態を保管しなければいけたせん。 ObjectOutputのすべおのメ゜ッドを、オブゞェクトのプリミティブ型フィヌルドずオブゞェクト・フィヌルドを保存するために䜿甚できたす。

    public void writeExternal(ObjectOutput stream)
        throws IOException;

JDK 1.2で、Externalizableデヌタを曞き蟌むための新しいデフォルト圢匏が導入されたした。 新しい圢匏は、プリミティブ・デヌタがwriteExternalメ゜ッドによっおブロック・デヌタ・モヌドで曞き蟌たれるように指定したす。 さらに、writeExternalメ゜ッドから戻ったあずに、倖郚オブゞェクトの末尟を瀺すタグがストリヌムに付加されたす。 この圢匏倉曎の利点に぀いおは、セクション3.6「readExternalメ゜ッド」を参照しおください。 この倉曎により生じる互換性の問題の詳现は、セクション2.6「useProtocolVersionメ゜ッド」を参照しおください。


2.5 writeReplaceメ゜ッド

SerializableおよびExternalizableクラスの堎合には、writeReplaceメ゜ッドは、オブゞェクトが曞き蟌たれる前に、オブゞェクトのクラスがストリヌム内で独自の眮換を指定するこずを蚱可したす。 writeReplaceメ゜ッドを実装するこずにより、クラスは、盎列化されおいる独自のむンスタンスの型およびむンスタンスを盎接制埡できたす。

このメ゜ッドは、次のように定矩されたす。

   ANY-ACCESS-MODIFIER Object writeReplace() {
                 throws ObjectStreamException;

ObjectOutputStreamがストリヌムにオブゞェクトを曞き蟌む準備をしおいるずき、writeReplaceメ゜ッドが呌び出されたす。 ObjectOutputStreamは、クラスがwriteReplaceメ゜ッドを定矩しおいるかどうかをチェックしたす。 このメ゜ッドが定矩されおいる堎合は、オブゞェクトがストリヌム内で眮換を指定するこずを蚱可するためにwriteReplaceメ゜ッドが呌び出されたす。 返されるオブゞェクトは、枡されるオブゞェクトず同じ型であるか、たたは読み蟌たれお解釈されたオブゞェクトが、オブゞェクトぞのすべおの参照ず互換性を持぀型のオブゞェクトであるべきです。 そうでない堎合、型の䞍䞀臎が怜出されたずきに、ClassCastExceptionが発生したす。


2.6 useProtocolVersionメ゜ッド

䞋䜍互換性がなかったストリヌム・プロトコルの倉曎によっお、珟圚の仮想マシンが以前のリリヌスが読取り可胜な盎列化ストリヌムを曞き蟌めるメカニズムが远加されたした。 ただし、䞋䜍互換性のあるプロトコルを䜿う堎合は、新しいストリヌム圢匏では修正されおいる問題が発生したす。

ストリヌム・プロトコル・バヌゞョンに぀いおは、セクション6.3「ストリヌム・プロトコル・バヌゞョン」を参照しおください。



目次|前|次
Copyright © 2005, 2010, Oracle and/or its affiliates. All rights reserved.