logo

Razred Java.io.ObjectOutputStream v Javi | Komplet 1

ObjectOutputStream zapiše primitivne tipe podatkov in grafe objektov Java v OutputStream. Objekte je mogoče brati (rekonstituirati) z uporabo ObjectInputStream. Trajno shranjevanje objektov je mogoče doseči z uporabo datoteke za tok. 

  • V tokove je mogoče zapisati samo objekte, ki podpirajo vmesnik java.io.Serializable. Razred vsakega objekta, ki ga je mogoče serializirati, je kodiran, vključno z imenom razreda in podpisom razreda, vrednostmi polj in nizov objekta ter zaključkom vseh drugih objektov, na katere se sklicujejo začetni objekti.
  • Java ObjectOutputStream se pogosto uporablja skupaj z Java ObjectInputStream. ObjectOutputStream se uporablja za pisanje objektov Java, ObjectInputStream pa se uporablja za ponovno branje objektov. 

Konstruktorji:   

    zaščiten ObjectOutputStream():Zagotovite način, da podrazredom, ki popolnoma znova izvajajo ObjectOutputStream, ni treba dodeljevati zasebnih podatkov, ki jih pravkar uporablja ta implementacija ObjectOutputStream.ObjectOutputStream(OutputStream out) :Ustvari ObjectOutputStream, ki piše v navedeni OutputStream. 

Metode:   



    zaščiten void annotateClass(Class cl):Podrazredi lahko izvajajo to metodo, da omogočijo shranjevanje podatkov razreda v toku. Ta metoda privzeto ne naredi ničesar. Ustrezna metoda v ObjectInputStream je resolveClass. Ta metoda je poklicana natanko enkrat za vsak edinstven razred v toku. Ime razreda in podpis bosta že zapisana v tok. Ta metoda lahko brezplačno uporablja ObjectOutputStream za shranjevanje kakršne koli predstavitve razreda, ki se ji zdi primerna (na primer bajtov datoteke razreda). Metoda resolveClass v ustreznem podrazredu ObjectInputStream mora brati in uporabljati vse podatke ali objekte, ki jih je napisal 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();  } } 

Izhod:  

A
    zaščiten void annotateProxyClass(Class cl):Podrazredi lahko implementirajo to metodo za shranjevanje podatkov po meri v tok skupaj z deskriptorji za dinamične razrede proxy. Ta metoda je poklicana natanko enkrat za vsak edinstven deskriptor razreda proxy v toku. Privzeta izvedba te metode v ObjectOutputStream ne naredi ničesar.
    Ustrezna metoda v ObjectInputStream je resolveProxyClass. Za dani podrazred ObjectOutputStream, ki preglasi to metodo, mora metoda resolveProxyClass v ustreznem podrazredu ObjectInputStream prebrati vse podatke ali objekte, ki jih je napisal 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();  } } 

Izhod:  

dodajanje niza v javi
A
    void close():Zapre tok. To metodo je treba poklicati, da sprostite vse vire, povezane s tokom. 
  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();  } } 
    Izhod: 
3
    void defaultWriteObject():Zapišite nestatična in neprehodna polja trenutnega razreda v ta tok. To je mogoče poklicati le iz metode writeObject razreda, ki se serializira. Vrgel bo NotActiveException, če bo poklican drugače. 
  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();  }  }  } 

Izhod:  

A
    zaščiten void drain():Izprazni vse medpomnjene podatke v ObjectOutputStream. Podobno splakovanju, vendar ne razširi splakovanja na osnovni tok. 
  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();  } } 
    zaščiten boolean enableReplaceObject(boolean enable):Omogoči tok za zamenjavo predmetov v toku. Ko je omogočena, se metoda replaceObject kliče za vsak objekt, ki se serializira. 
    Če je enable nastavljen na true in je nameščen upravitelj varnosti, ta metoda najprej pokliče metodo checkPermission upravitelja varnosti z dovoljenjem SerializablePermission('enableSubstitution'), da zagotovi, da lahko tok omogoči zamenjavo predmetov v toku. 
  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();  } } 

Izhod:  

false A
    ObjectOutputStream.PutField putFields():Pridobite objekt, uporabljen za medpomnjenje trajnih polj, ki bodo zapisana v tok. Polja bodo zapisana v tok, ko bo poklicana metoda 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();  } } 

Izhod:  

A
    zaščiteni objekt replaceObject(Object obj):Ta metoda bo omogočila zaupanja vrednim podrazredom ObjectOutputStream, da med serializacijo en objekt nadomestijo z drugim. Zamenjava objektov je onemogočena, dokler ne pokličete enableReplaceObject. Metoda enableReplaceObject preveri, ali je toku, ki zahteva zamenjavo, mogoče zaupati. Prva pojavitev vsakega predmeta, zapisanega v tok serializacije, se posreduje replaceObject. Naknadni sklice na objekt so nadomeščeni z objektom, vrnjenim s prvotnim klicem replaceObject. Za zagotovitev, da zasebno stanje objektov ni nenamerno izpostavljeno, lahko samo zaupanja vredni tokovi uporabljajo replaceObject. 
    Ta metoda se pokliče samo enkrat, ko se vsak predmet prvič sreča. Vse nadaljnje reference na objekt bodo preusmerjene na nov objekt. Ta metoda bi morala vrniti predmet, ki ga je treba zamenjati, ali izvirni objekt.
    Null se lahko vrne kot predmet, ki ga je treba zamenjati, vendar lahko povzroči izjemo NullReferenceException v razredih, ki vsebujejo sklice na izvirni objekt, saj morda pričakujejo objekt namesto ničelne vrednosti. 
  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();  } } 

Izhod:  

GeeksforGeeks
    void useProtocolVersion(int različica):Določite različico protokola toka, ki bo uporabljena pri pisanju toka. Ta rutina nudi kavelj, ki omogoča trenutni različici serializacije pisanje v formatu, ki je nazaj združljiv s prejšnjo različico formata toka.
    Potrudili se bomo, da se izognemo uvajanju dodatnih nezdružljivosti za nazaj; včasih pa ni druge možnosti. 
  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();  } } 

Izhod:  

GeeksforGeeks

Naslednji članek: Razred Java.io.ObjectOutputStream v Javi | Komplet 2


 

Ustvari kviz