logo

Java.io.ObjectOutputStream-klass i Java | Set 1

En ObjectOutputStream skriver primitiva datatyper och grafer av Java-objekt till en OutputStream. Objekten kan läsas (rekonstitueras) med hjälp av en ObjectInputStream. Beständig lagring av objekt kan åstadkommas genom att använda en fil för strömmen. 

  • Endast objekt som stöder java.io.Serializable-gränssnittet kan skrivas till strömmar. Klassen för varje serialiserbart objekt kodas inklusive klassnamnet och signaturen för klassen, värdena för objektets fält och arrayer och stängningen av alla andra objekt som refereras från de initiala objekten.
  • Java ObjectOutputStream används ofta tillsammans med en Java ObjectInputStream. ObjectOutputStream används för att skriva Java-objekten och ObjectInputStream används för att läsa objekten igen. 

Konstruktörer:   

    protected ObjectOutputStream() :Tillhandahåll ett sätt för underklasser som helt omimplementerar ObjectOutputStream att inte behöva allokera privata data som bara används av den här implementeringen av ObjectOutputStream.ObjectOutputStream(OutputStream ut) :Skapar en ObjectOutputStream som skriver till den angivna OutputStream. 

Metoder:   



    skyddad void annotateClass(Class cl):Underklasser kan implementera denna metod för att tillåta att klassdata lagras i strömmen. Som standard gör denna metod ingenting. Motsvarande metod i ObjectInputStream är resolveClass. Denna metod anropas exakt en gång för varje unik klass i strömmen. Klassens namn och signatur kommer redan att ha skrivits till strömmen. Den här metoden kan göra fri användning av ObjectOutputStream för att spara alla representationer av klassen som den anser lämpliga (till exempel byte i klassfilen). ResolveClass-metoden i motsvarande underklass av ObjectInputStream måste läsa och använda all data eller objekt skrivna av 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();  } } 

Utgång:  

A
    skyddad void annotateProxyClass(Class cl):Underklasser kan implementera denna metod för att lagra anpassade data i strömmen tillsammans med deskriptorer för dynamiska proxyklasser. Denna metod anropas exakt en gång för varje unik proxyklassbeskrivning i strömmen. Standardimplementeringen av denna metod i ObjectOutputStream gör ingenting.
    Motsvarande metod i ObjectInputStream är resolveProxyClass. För en given underklass av ObjectOutputStream som åsidosätter denna metod måste resolveProxyClass-metoden i motsvarande underklass av ObjectInputStream läsa alla data eller objekt skrivna av 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();  } } 

Utgång:  

A
    void close() :Stänger strömmen. Den här metoden måste anropas för att frigöra alla resurser som är kopplade till strömmen. 
  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();  } } 
    Utgång: 
3
    void defaultWriteObject() :Skriv de icke-statiska och icke-transienta fälten för den aktuella klassen till denna ström. Detta kan endast anropas från metoden writeObject för klassen som serialiseras. Det kommer att kasta NotActiveException om det kallas på annat sätt. 
  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();  }  }  } 

Utgång:  

A
    protected void drain():Töm alla buffrade data i ObjectOutputStream. Liknar spolning men sprider inte spolningen till den underliggande strömmen. 
  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 boolean enableReplaceObject(boolean enable):Aktivera strömmen att byta ut objekt i strömmen. När den är aktiverad anropas metoden replaceObject för varje objekt som serialiseras. 
    Om enable är sant och det finns en säkerhetshanterare installerad anropar denna metod först säkerhetshanterarens checkPermission-metod med en SerializablePermission('enableSubstitution') behörighet för att säkerställa att det är ok att tillåta strömmen att byta ut objekt i strömmen. 
  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();  } } 

Utgång:  

false A
    ObjectOutputStream.PutField putFields():Hämta objektet som används för att buffra beständiga fält som ska skrivas till strömmen. Fälten kommer att skrivas till strömmen när metoden writeFields anropas. 
  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();  } } 

Utgång:  

A
    protected Object replaceObject(Object obj):Denna metod kommer att tillåta betrodda underklasser av ObjectOutputStream att ersätta ett objekt med ett annat under serialisering. Ersättning av objekt är inaktiverat tills enableReplaceObject anropas. Metoden enableReplaceObject kontrollerar att strömmen som begär ersättning kan litas på. Den första förekomsten av varje objekt som skrivits in i serialiseringsströmmen skickas till replaceObject. Efterföljande referenser till objektet ersätts av objektet som returneras av det ursprungliga anropet till replaceObject. För att säkerställa att objektens privata tillstånd inte oavsiktligt exponeras kan endast betrodda strömmar använda replaceObject. 
    Denna metod anropas endast en gång när varje objekt först påträffas. Alla efterföljande referenser till objektet kommer att omdirigeras till det nya objektet. Denna metod bör returnera objektet som ska ersättas eller det ursprungliga objektet.
    Null kan returneras som objektet som ska ersättas men kan orsaka NullReferenceException i klasser som innehåller referenser till det ursprungliga objektet eftersom de kan förvänta sig ett objekt istället för null. 
  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();  } } 

Utgång:  

GeeksforGeeks
    void useProtocolVersion(int version):Ange strömprotokollversion som ska användas när du skriver strömmen. Den här rutinen tillhandahåller en krok för att den aktuella versionen av Serialization ska kunna skriva i ett format som är bakåtkompatibelt med en tidigare version av strömningsformatet.
    Alla ansträngningar kommer att göras för att undvika att införa ytterligare bakåtkompatibiliteter; men ibland finns det inget annat alternativ. 
  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();  } } 

Utgång:  

GeeksforGeeks

Nästa artikel: Java.io.ObjectOutputStream-klass i Java | Set 2


 

Skapa frågesport