logo

Java の Java.io.ObjectOutputStream クラス |セット1

ObjectOutputStream は、Java オブジェクトのプリミティブ データ型とグラフを OutputStream に書き込みます。オブジェクトは、ObjectInputStream を使用して読み取る (再構成する) ことができます。オブジェクトの永続的なストレージは、ストリームのファイルを使用することで実現できます。 

  • java.io.Serializable インターフェースをサポートするオブジェクトのみをストリームに書き込むことができます。各シリアル化可能なオブジェクトのクラスは、クラス名とクラスのシグネチャ、オブジェクトのフィールドと配列の値、および初期オブジェクトから参照される他のオブジェクトのクロージャを含めてエンコードされます。
  • Java ObjectOutputStream は、Java ObjectInputStream と一緒に使用されることがよくあります。 ObjectOutputStream は Java オブジェクトの書き込みに使用され、ObjectInputStream はオブジェクトの再読み取りに使用されます。 

コンストラクター:   

    保護された ObjectOutputStream() :ObjectOutputStream を完全に再実装するサブクラスが、ObjectOutputStream のこの実装によってのみ使用されるプライベート データを割り当てる必要がないようにする方法を提供します。ObjectOutputStream(出力ストリーム出力):指定された OutputStream に書き込む ObjectOutputStream を作成します。 

方法:   



    protected void annotateClass(Class cl) :サブクラスはこのメソッドを実装して、クラス データをストリームに格納できるようにすることができます。デフォルトでは、このメソッドは何も行いません。 ObjectInputStream の対応するメソッドは、resolveClass です。このメソッドは、ストリーム内の固有のクラスごとに 1 回だけ呼び出されます。クラス名と署名はすでにストリームに書き込まれています。このメソッドは、ObjectOutputStream を自由に使用して、適切とみなされるクラスの表現 (たとえば、クラス ファイルのバイト) を保存できます。 ObjectInputStream の対応するサブクラスのsolveClassメソッドは、annotateClassによって書き込まれたデータまたはオブジェクトを読み取り、使用する必要があります。 
  Syntax :  protected void annotateClass(Class cl) throws IOException   Parameters:   cl - the class to annotate custom data for   Throws:   IOException 
Java
//Java program demonstrating ObjectOutputStream methods //illustrating annotateClass(Class cl) method import java.io.*; class ObjectOutputStreamDemo extends ObjectOutputStream {  public ObjectOutputStreamDemo(OutputStream out) throws IOException  {  super(out);  }    public static void main(String[] args) throws IOException  ClassNotFoundException   {  FileOutputStream fout = new FileOutputStream('file.txt');  ObjectOutputStreamDemo oot = new ObjectOutputStreamDemo(fout);  Character c = 'A';    //illustrating annotateClass(Class cl) method  oot.annotateClass(Character.class);    //Write the specified object to the ObjectOutputStream  oot.writeObject(c);    //flushing the stream  oot.flush();    //closing the stream  oot.close();    FileInputStream fin = new FileInputStream('file.txt');  ObjectInputStream oit = new ObjectInputStream(fin);  System.out.print(oit.readObject());  oit.close();  } } 

出力:  

私のモニターのサイズはどれくらいですか
A
    protected void annotateProxyClass(Class cl) :サブクラスはこのメソッドを実装して、動的プロキシ クラスの記述子とともにカスタム データをストリームに保存できます。このメソッドは、ストリーム内の固有のプロキシ クラス記述子ごとに 1 回だけ呼び出されます。 ObjectOutputStream 内のこのメソッドのデフォルト実装は何も行いません。
    ObjectInputStream の対応するメソッドは、resolveProxyClass です。このメソッドをオーバーライドする ObjectOutputStream の特定のサブクラスの場合、ObjectInputStream の対応するサブクラスのsolveProxyClass メソッドは、annotateProxyClass によって書き込まれたデータまたはオブジェクトを読み取る必要があります。 
  Syntax :  protected void annotateProxyClass(Class cl) throws IOException   Parameters:   cl - the proxy class to annotate custom data for   Throws:   IOException
Java
//Java program demonstrating ObjectOutputStream  //illustrating annotateProxyClass(Class cl) method import java.io.*; class ObjectOutputStreamDemo extends ObjectOutputStream {  public ObjectOutputStreamDemo(OutputStream out) throws IOException  {  super(out);  }    public static void main(String[] args) throws IOException   ClassNotFoundException  {  FileOutputStream fout = new FileOutputStream('file.txt');  ObjectOutputStreamDemo oot = new ObjectOutputStreamDemo(fout);    Character c = 'A';    //illustrating annotateProxyClass(Class cl) method  oot.annotateProxyClass(Character.class);    //Write the specified object to the ObjectOutputStream  oot.writeObject(c);    //flushing  oot.flush();    //closing the stream  oot.close();    FileInputStream fin = new FileInputStream('file.txt');  ObjectInputStream oit = new ObjectInputStream(fin);  System.out.print(oit.readObject());  oit.close();  } } 

出力:  

A
    void close() :ストリームを閉じます。ストリームに関連付けられたリソースを解放するには、このメソッドを呼び出す必要があります。 
  Syntax :  public void close() throws IOException   Throws:   IOException
Java
//Java program demonstrating ObjectOutputStream  //illustrating close() method import java.io.*; class ObjectOutputStreamDemo {  public static void main(String[] args) throws IOException  {  FileOutputStream fout = new FileOutputStream('file.txt');  ObjectOutputStream oot = new ObjectOutputStream(fout);  oot.write(3);    //illustrating close()  oot.close();    FileInputStream fin = new FileInputStream('file.txt');  ObjectInputStream oit = new ObjectInputStream(fin);  System.out.println(oit.read());  oit.close();  } } 
    出力: 
3
    void defaultWriteObject() :現在のクラスの非静的および非一時的なフィールドをこのストリームに書き込みます。これは、シリアル化されているクラスの writeObject メソッドからのみ呼び出すことができます。それ以外の方法で呼び出された場合は、NotActiveException がスローされます。 
  Syntax :  public void defaultWriteObject() throws IOException   Throws:   IOException 
Java
//Java program demonstrating ObjectOutputStream //illustrating defaultWriteObject() method import java.io.*; class ObjectOutputStreamDemo {  public static void main(String[] arg) throws IOException  ClassNotFoundException  {  Character a = 'A';  FileOutputStream fout = new FileOutputStream('file.txt');  ObjectOutputStream oot = new ObjectOutputStream(fout);  oot.writeChar(a);  oot.flush();    // close the stream  oot.close();    FileInputStream fin = new FileInputStream('file.txt');  ObjectInputStream oit = new ObjectInputStream(fin);    // reading the character  System.out.println(oit.readChar());  } }  class demo implements Serializable   {  String s = 'GeeksfoGeeks';  private void writeObject(ObjectOutputStream out)  throws IOException ClassNotFoundException  {  //demonstrating defaultWriteObject()  out.defaultWriteObject();  }  }  } 

出力:  

A
    保護された void ドレイン() :バッファリングされたデータを ObjectOutputStream に排出します。フラッシュに似ていますが、フラッシュを基になるストリームに伝播しません。 
  Syntax :  protected void drain() throws IOException   Throws:   IOException
Java
//Java program demonstrating ObjectOutputStream methods //illustrating drain() method import java.io.*; class ObjectOutputStreamDemo extends ObjectOutputStream {  public ObjectOutputStreamDemo(OutputStream out) throws IOException  {  super(out);  }  public static void main(String[] arg) throws IOException  ClassNotFoundException  {  FileOutputStream fout = new FileOutputStream('file.txt');  ObjectOutputStream oot = new ObjectOutputStream(fout);  ObjectOutputStreamDemo obj = new ObjectOutputStreamDemo(oot);    //illustrating drain()  obj.drain();    //closing the underlying stream  oot.close();  fout.close();  } } 
    protected booleanenableReplaceObject(booleanenable):ストリームがストリーム内のオブジェクトを置換できるようにします。有効にすると、シリアル化されるすべてのオブジェクトに対して replaceObject メソッドが呼び出されます。 
    Enable が true で、セキュリティ マネージャーがインストールされている場合、このメソッドは最初に SerializablePermission('enableSubstitution') アクセス許可を指定してセキュリティ マネージャーの checkPermission メソッドを呼び出し、ストリーム内のオブジェクトの置換をストリームが有効にしても問題がないことを確認します。 
  Syntax :  protected boolean enableReplaceObject(boolean enable) throws SecurityException   Parameters:   enable - boolean parameter to enable replacement of objects   Returns:   the previous setting before this method was invoked   Throws:   SecurityException
Java
//Java program demonstrating ObjectOutputStream //illustrating enableReplaceObject method import java.io.*; class ObjectOutputStreamDemo extends ObjectOutputStream  {  public ObjectOutputStreamDemo(OutputStream out) throws IOException  {  super(out);  }  public static void main(String[] args) throws IOException   ClassNotFoundException  {  FileOutputStream fout = new FileOutputStream('file.txt');  ObjectOutputStreamDemo oot = new ObjectOutputStreamDemo(fout);  Character c = 'A';    //illustrating enableReplaceObject method  System.out.println(oot.enableReplaceObject(true));    //Write the specified object to the ObjectOutputStream  oot.writeObject(c);    //flushing  oot.flush();    //closing the stream  oot.close();    FileInputStream fin = new FileInputStream('file.txt');  ObjectInputStream oit = new ObjectInputStream(fin);  System.out.print(oit.readObject());  oit.close();  } } 

出力:  

Javaの逆文字列
false A
    ObjectOutputStream.PutField putFields():ストリームに書き込まれる永続フィールドをバッファリングするために使用されるオブジェクトを取得します。 writeFields メソッドが呼び出されたときに、フィールドはストリームに書き込まれます。 
  Syntax :  public ObjectOutputStream.PutField putFields() throws IOException   Returns:   an instance of the class Putfield that holds the serializable fields   Throws:   IOException
Java
//Java program demonstrating ObjectOutputStream //illustrating PutField method import java.io.*; class ObjectOutputStreamDemo {  public static void main(String[] arg) throws IOException  ClassNotFoundException  {  Character a ='A';  FileOutputStream fout = new FileOutputStream('file.txt');  ObjectOutputStream oot = new ObjectOutputStream(fout);  oot.writeChar(a);  oot.flush();    // close the stream  oot.close();    FileInputStream fin = new FileInputStream('file.txt');  ObjectInputStream oit = new ObjectInputStream(fin);    // reading the character  System.out.println(oit.readChar());  } } class demo implements Serializable {  private void writeObject(ObjectOutputStream out)  throws IOException ClassNotFoundException  {  // Retrieve the object used to buffer  // persistent fields to be written to the stream  ObjectOutputStream.PutField fields = out.putFields();  } } 

出力:  

A
    保護されたオブジェクト replaceObject(Object obj):このメソッドを使用すると、ObjectOutputStream の信頼できるサブクラスが、シリアル化中にあるオブジェクトを別のオブジェクトに置き換えることができます。オブジェクトの置換は、enableReplaceObject が呼び出されるまで無効になります。 EnableReplaceObject メソッドは、置換を要求しているストリームが信頼できるかどうかを確認します。シリアル化ストリームに最初に書き込まれた各オブジェクトは replaceObject に渡されます。オブジェクトへの後続の参照は、replaceObject への最初の呼び出しによって返されたオブジェクトによって置き換えられます。オブジェクトのプライベート状態が意図せず公開されないようにするために、信頼されたストリームのみが replaceObject を使用できます。 
    このメソッドは、各オブジェクトが最初に見つかったときに 1 回だけ呼び出されます。オブジェクトへの後続の参照はすべて、新しいオブジェクトにリダイレクトされます。このメソッドは、置換されるオブジェクトまたは元のオブジェクトを返す必要があります。
    置換されるオブジェクトとして Null を返すことはできますが、元のオブジェクトへの参照を含むクラスでは、null の代わりにオブジェクトを期待している可能性があるため、NullReferenceException が発生する可能性があります。 
  Syntax :  protected Object replaceObject(Object obj) throws IOException   Parameters:   obj - the object to be replaced   Returns:   the alternate object that replaced the specified one   Throws:   IOException
Java
//Java program demonstrating ObjectOutputStream //illustrating replaceObject method import java.io.*; class ObjectOutputStreamDemo extends ObjectOutputStream {  public ObjectOutputStreamDemo(OutputStream out) throws IOException  {  super(out);  }  public static void main(String[] args) throws IOException   ClassNotFoundException   {  FileOutputStream fout = new FileOutputStream('file.txt');  ObjectOutputStreamDemo oot = new ObjectOutputStreamDemo(fout);  String a = 'forGeeks';  String b = 'Geeks';  //Write the specified object to the ObjectOutputStream  oot.writeObject(a);    //flushing the stream  oot.flush();  oot.enableReplaceObject(true);    //illustrating replaceObject  System.out.print(oot.replaceObject(b));    //closing the stream  oot.close();    FileInputStream fin = new FileInputStream('file.txt');  ObjectInputStream oit = new ObjectInputStream(fin);  System.out.print(oit.readObject());  oit.close();  } } 

出力:  

差分を切り詰めて削除する
GeeksforGeeks
    void useProtocolVersion(int バージョン) :ストリームを書き込むときに使用するストリーム プロトコル バージョンを指定します。このルーチンは、現在のバージョンのシリアル化が、以前のバージョンのストリーム形式と下位互換性のある形式で書き込むことができるようにするフックを提供します。
    さらなる下位非互換性の導入を避けるためにあらゆる努力が払われます。ただし、他に代替手段がない場合もあります。 
  Syntax :  public void useProtocolVersion(int version) throws IOException   Parameters:   version - use ProtocolVersion from java.io.ObjectStreamConstants.   Throws:   IllegalStateException IllegalArgumentException IOException 
Java
 //Java program demonstrating ObjectOutputStream  //illustrating useProtocolVersion() method import java.io.*; class ObjectOutputStreamDemo extends ObjectOutputStream {  public ObjectOutputStreamDemo(OutputStream out) throws IOException  {  super(out);  }  public static void main(String[] args) throws IOException   ClassNotFoundException   {  FileOutputStream fout = new FileOutputStream('file.txt');  ObjectOutputStreamDemo oot = new ObjectOutputStreamDemo(fout);  String a = 'forGeeks';  String b = 'Geeks';  //illustrating useProtocolVersion()  oot.useProtocolVersion(ObjectStreamConstants.PROTOCOL_VERSION_2);  //Write the specified object to the ObjectOutputStream  oot.writeObject(b);  oot.writeObject(a);  //flushing the stream  oot.flush();  oot.close();  FileInputStream fin = new FileInputStream('file.txt');  ObjectInputStream oit = new ObjectInputStream(fin);  System.out.print(oit.readObject());  System.out.print(oit.readObject());  oit.close();  } } 

出力:  

GeeksforGeeks

次の記事: Java の Java.io.ObjectOutputStream クラス |セット2


 

クイズの作成