logo

Trieda Java.io.ObjectOutputStream v jazyku Java | Set 1

ObjectOutputStream zapisuje primitívne dátové typy a grafy objektov Java do OutputStream. Objekty je možné čítať (rekonštituovať) pomocou ObjectInputStream. Trvalé ukladanie objektov je možné dosiahnuť použitím súboru pre prúd. 

ako spustiť skript na linuxe
  • Do streamov možno zapisovať iba objekty, ktoré podporujú rozhranie java.io.Serializable. Trieda každého serializovateľného objektu je zakódovaná vrátane názvu triedy a podpisu triedy, hodnôt polí a polí objektu a uzavretia akýchkoľvek iných objektov, na ktoré sa odkazuje z pôvodných objektov.
  • Java ObjectOutputStream sa často používa spolu s Java ObjectInputStream. ObjectOutputStream sa používa na zápis objektov Java a ObjectInputStream sa používa na opätovné čítanie objektov. 

Konštruktéri:   

    chránený ObjectOutputStream() :Poskytnite podtriedam, ktoré úplne reimplementujú ObjectOutputStream, aby nemuseli alokovať súkromné ​​údaje práve používané touto implementáciou ObjectOutputStream.ObjectOutputStream(OutputStream out) :Vytvorí ObjectOutputStream, ktorý zapíše do zadaného OutputStream. 

Metódy:   



    chránená void anotovaťClass(Class cl):Podtriedy môžu implementovať túto metódu, aby umožnili uloženie údajov triedy v prúde. Štandardne táto metóda nerobí nič. Zodpovedajúca metóda v ObjectInputStream je resolveClass. Táto metóda sa volá presne raz pre každú jedinečnú triedu v prúde. Názov triedy a podpis už budú zapísané do streamu. Táto metóda môže voľne využívať ObjectOutputStream na uloženie akejkoľvek reprezentácie triedy, ktorú považuje za vhodnú (napríklad bajtov súboru triedy). Metóda resolveClass v zodpovedajúcej podtriede ObjectInputStream musí čítať a používať všetky údaje alebo objekty zapísané pomocou 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();  } } 

výstup:  

A
    chránená neplatnosť anotovaťProxyClass (trieda cl):Podtriedy môžu implementovať túto metódu na ukladanie vlastných údajov v prúde spolu s deskriptormi pre dynamické triedy proxy. Táto metóda sa volá presne raz pre každý jedinečný deskriptor triedy proxy v prúde. Predvolená implementácia tejto metódy v ObjectOutputStream nerobí nič.
    Zodpovedajúca metóda v ObjectInputStream je resolveProxyClass. Pre danú podtriedu ObjectOutputStream, ktorá prepíše túto metódu, musí metóda resolveProxyClass v zodpovedajúcej podtriede ObjectInputStream prečítať všetky údaje alebo objekty zapísané pomocou 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();  } } 

výstup:  

A
    void close() :Zatvorí prúd. Túto metódu je potrebné zavolať, aby sa uvoľnili všetky prostriedky spojené s prúdom. 
  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();  } } 
    výstup: 
3
    void defaultWriteObject() :Do tohto prúdu zapíšte nestatické a neprechodné polia aktuálnej triedy. Toto možno volať len z metódy writeObject triedy, ktorá sa serializuje. Ak sa volá inak, vyvolá výnimku 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();  }  }  } 

výstup:  

A
    chránený void drain() :Vypustite všetky údaje vo vyrovnávacej pamäti v ObjectOutputStream. Podobné ako splachovanie, ale nešíri splachovanie do spodného prúdu. 
  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();  } } 
    chránená boolovská hodnota enableReplaceObject(povolenie logickej hodnoty):Povoľte streamu nahradiť objekty v streame. Keď je povolená, metóda replaceObject sa volá pre každý objekt, ktorý sa serializuje. 
    Ak je povolená hodnota true a je nainštalovaný bezpečnostný manažér, táto metóda najskôr zavolá metódu checkPermission správcu bezpečnosti s povolením SerializablePermission('enableSubstitution'), aby sa zabezpečilo, že je v poriadku umožniť streamu nahradiť objekty v streame. 
  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();  } } 

výstup:  

false A
    ObjectOutputStream.PutField putFields():Získajte objekt, ktorý sa používa na vyrovnávanie trvalých polí, ktoré sa majú zapísať do prúdu. Polia sa zapíšu do streamu, keď sa zavolá metóda 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();  } } 

výstup:  

A
    chránený objekt nahradiťObjekt(objekt objektu):Táto metóda umožní dôveryhodným podtriedam ObjectOutputStream nahradiť jeden objekt druhým počas serializácie. Nahrádzanie objektov je zakázané, kým sa nezavolá enableReplaceObject. Metóda enableReplaceObject kontroluje, či je možné dôverovať streamu, ktorý požaduje vykonanie výmeny. Prvý výskyt každého objektu zapísaného do serializačného toku sa odovzdá na nahradenieObjektu. Následné odkazy na objekt sú nahradené objektom vráteným pôvodným volaním nahradiťObjekt. Aby sa zaistilo, že súkromný stav objektov nie je neúmyselne odhalený, iba dôveryhodné toky môžu použiť nahradiťObjekt. 
    Táto metóda sa volá iba raz, keď sa s každým objektom prvýkrát stretnete. Všetky následné odkazy na objekt budú presmerované na nový objekt. Táto metóda by mala vrátiť objekt, ktorý sa má nahradiť, alebo pôvodný objekt.
    Null možno vrátiť ako objekt, ktorý sa má nahradiť, ale môže spôsobiť výnimku NullReferenceException v triedach, ktoré obsahujú odkazy na pôvodný objekt, pretože môžu očakávať objekt namiesto hodnoty 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();  } } 

výstup:  

GeeksforGeeks
    void useProtocolVersion(int verzia) :Zadajte verziu protokolu toku, ktorá sa má použiť pri zapisovaní toku. Táto rutina poskytuje háčik, ktorý umožňuje aktuálnej verzii serializácie zapisovať vo formáte, ktorý je spätne kompatibilný s predchádzajúcou verziou formátu toku.
    Vyvinie sa maximálne úsilie, aby sa zabránilo zavedeniu dodatočných spätných nekompatibilít; niekedy však neexistuje iná alternatíva. 
  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();  } } 

výstup:  

abeceda ako čísla
GeeksforGeeks

Ďalší článok: Trieda Java.io.ObjectOutputStream v jazyku Java | Súprava 2


 

Vytvoriť kvíz