logo

Java.io.ObjectOutputStream klasa u Javi | Set 1

ObjectOutputStream zapisuje primitivne tipove podataka i grafove Java objekata u OutputStream. Objekti se mogu čitati (rekonstituirati) pomoću ObjectInputStream-a. Trajno pohranjivanje objekata može se postići korištenjem datoteke za tok. 

  • Samo objekti koji podržavaju sučelje java.io.Serializable mogu se pisati u tokove. Klasa svakog objekta koji se može serijalizirati kodirana je uključujući ime klase i potpis klase, vrijednosti polja i nizova objekta i zatvaranje svih drugih objekata referenciranih iz početnih objekata.
  • Java ObjectOutputStream često se koristi zajedno s Java ObjectInputStream. ObjectOutputStream se koristi za pisanje Java objekata, a ObjectInputStream se koristi za ponovno čitanje objekata. 

Konstruktori:   

    zaštićeni ObjectOutputStream() :Omogućite način da podklase koje potpuno ponovno implementiraju ObjectOutputStream ne moraju dodijeliti privatne podatke koje upravo koristi ova implementacija ObjectOutputStreama.ObjectOutputStream(OutputStream out) :Stvara ObjectOutputStream koji piše u navedeni OutputStream. 

Metode:   



    zaštićena praznina annotateClass(Class cl) :Podklase mogu implementirati ovu metodu kako bi omogućile pohranjivanje podataka klase u toku. Prema zadanim postavkama ova metoda ne radi ništa. Odgovarajuća metoda u ObjectInputStream je resolveClass. Ova se metoda poziva točno jednom za svaku jedinstvenu klasu u toku. Naziv klase i potpis već će biti zapisani u tok. Ova metoda može besplatno koristiti ObjectOutputStream za spremanje bilo koje reprezentacije klase koju smatra prikladnom (na primjer bajtove datoteke klase). Metoda resolveClass u odgovarajućoj podklasi ObjectInputStream mora čitati i koristiti sve podatke ili objekte koje je napisao 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();  } } 

Izlaz:  

kako ukloniti prvi znak u excelu
A
    zaštićeni void annotateProxyClass(Class cl) :Potklase mogu implementirati ovu metodu za pohranu prilagođenih podataka u tok zajedno s deskriptorima za dinamičke proxy klase. Ova se metoda poziva točno jednom za svaki jedinstveni deskriptor proxy klase u toku. Zadana implementacija ove metode u ObjectOutputStream ne radi ništa.
    Odgovarajuća metoda u ObjectInputStream je resolveProxyClass. Za danu potklasu ObjectOutputStream koja nadjačava ovu metodu, metoda resolveProxyClass u odgovarajućoj podklasi ObjectInputStream mora pročitati sve podatke ili objekte koje je napisao 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();  } } 

Izlaz:  

A
    void close() :Zatvara tok. Ova se metoda mora pozvati za oslobađanje svih resursa povezanih 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();  } } 
    Izlaz: 
3
    void defaultWriteObject() :Zapišite nestatična i neprolazna polja trenutne klase u ovaj tok. Ovo se može pozvati samo iz metode writeObject klase koja se serijalizira. Izbacit će NotActiveException ako se pozove drugačije. 
  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();  }  }  } 

Izlaz:  

A
    zaštićeni void drain() :Ispraznite sve podatke u međuspremniku u ObjectOutputStream. Slično ispiranju, ali ne prenosi ispiranje na temeljni 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štićeni boolean enableReplaceObject(boolean enable):Omogućite stream da izvrši zamjenu objekata u streamu. Kada je omogućena, metoda replaceObject poziva se za svaki objekt koji se serijalizira. 
    Ako je enable postavljeno na true i postoji instaliran upravitelj sigurnosti, ova metoda prvo poziva metodu checkPermission upravitelja sigurnosti s dozvolom SerializablePermission('enableSubstitution') kako bi se osiguralo da je u redu omogućiti toku da izvrši zamjenu objekata u 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();  } } 

Izlaz:  

false A
    ObjectOutputStream.PutField putFields():Dohvaćanje objekta korištenog za međuspremnik trajnih polja koja će se pisati u tok. Polja će biti zapisana u tok kada se pozove 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();  } } 

Izlaz:  

A
    zaštićeni objekt replaceObject(Object obj):Ova metoda će omogućiti pouzdanim potklasama ObjectOutputStream da zamijene jedan objekt drugim tijekom serijalizacije. Zamjena objekata je onemogućena dok se enableReplaceObject ne pozove. Metoda enableReplaceObject provjerava je li tok koji zahtijeva zamjenu pouzdan. Prvo pojavljivanje svakog objekta upisanog u tok serijalizacije prosljeđuje se replaceObjectu. Naknadne reference na objekt zamjenjuju se objektom vraćenim izvornim pozivom replaceObject. Kako bi se osiguralo da privatno stanje objekata nije nenamjerno izloženo, samo pouzdani tokovi mogu koristiti replaceObject. 
    Ova metoda se poziva samo jednom kada se svaki objekt prvi put susretne. Sve sljedeće reference na objekt bit će preusmjerene na novi objekt. Ova metoda bi trebala vratiti objekt koji treba zamijeniti ili izvorni objekt.
    Null se može vratiti kao objekt koji treba zamijeniti, ali može uzrokovati NullReferenceException u klasama koje sadrže reference na izvorni objekt budući da mogu očekivati ​​objekt umjesto 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();  } } 

Izlaz:  

GeeksforGeeks
    void useProtocolVersion(int verzija) :Odredite verziju protokola streama koja će se koristiti prilikom pisanja streama. Ova rutina pruža spojnicu koja omogućuje trenutnoj verziji serijalizacije pisanje u formatu koji je unatrag kompatibilan s prethodnom verzijom formata streama.
    Učinit će se svaki napor da se izbjegne uvođenje dodatnih unatrag nekompatibilnosti; no ponekad nema druge alternative. 
  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();  } } 

Izlaz:  

GeeksforGeeks

Sljedeći članak: Java.io.ObjectOutputStream klasa u Javi | Set 2


 

Napravi kviz