logo

Java.io.ObjectOutputStream-klasse i Java | Sæt 1

En ObjectOutputStream skriver primitive datatyper og grafer af Java-objekter til en OutputStream. Objekterne kan læses (rekonstitueres) ved hjælp af en ObjectInputStream. Vedvarende lagring af objekter kan opnås ved at bruge en fil til strømmen. 

indsættelsessorteringsalgoritme
  • Kun objekter, der understøtter java.io.Serializable-grænsefladen, kan skrives til streams. Klassen for hvert serialiserbart objekt er kodet, herunder klassenavnet og signaturen for klassen, værdierne af objektets felter og arrays og lukningen af ​​andre objekter, der refereres til fra de oprindelige objekter.
  • Java ObjectOutputStream bruges ofte sammen med en Java ObjectInputStream. ObjectOutputStream bruges til at skrive Java-objekterne, og ObjectInputStream bruges til at læse objekterne igen. 

Konstruktører:   

    beskyttet ObjectOutputStream():Giv underklasser, der fuldstændigt genimplementerer ObjectOutputStream, en måde, så de ikke behøver at allokere private data, der netop er brugt af denne implementering af ObjectOutputStream.ObjectOutputStream(OutputStream ud):Opretter en ObjectOutputStream, der skriver til den angivne OutputStream. 

Metoder:   



    beskyttet void annotateClass(Class cl):Underklasser kan implementere denne metode for at tillade, at klassedata gemmes i strømmen. Som standard gør denne metode intet. Den tilsvarende metode i ObjectInputStream er resolveClass. Denne metode kaldes præcis én gang for hver unik klasse i strømmen. Klassens navn og signatur vil allerede være skrevet til strømmen. Denne metode kan gøre fri brug af ObjectOutputStream til at gemme enhver repræsentation af den klasse, den finder passende (for eksempel bytes af klassefilen). ResolveClass-metoden i den tilsvarende underklasse af ObjectInputStream skal læse og bruge alle data eller objekter skrevet af 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();  } } 

Output:  

A
    beskyttet void annotateProxyClass(Class cl):Underklasser kan implementere denne metode til at gemme brugerdefinerede data i strømmen sammen med deskriptorer for dynamiske proxyklasser. Denne metode kaldes nøjagtigt én gang for hver unik proxy-klassedeskriptor i strømmen. Standardimplementeringen af ​​denne metode i ObjectOutputStream gør intet.
    Den tilsvarende metode i ObjectInputStream er resolveProxyClass. For en given underklasse af ObjectOutputStream, der tilsidesætter denne metode, skal resolveProxyClass-metoden i den tilsvarende underklasse af ObjectInputStream læse alle data eller objekter skrevet af 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();  } } 

Output:  

A
    void close():Lukker strømmen. Denne metode skal kaldes for at frigive alle ressourcer forbundet med 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();  } } 
    Output: 
3
    void defaultWriteObject() :Skriv de ikke-statiske og ikke-transiente felter for den aktuelle klasse til denne strøm. Dette kan kun kaldes fra skriveObject-metoden for den klasse, der serialiseres. Det vil kaste NotActiveException, hvis det kaldes på anden måde. 
  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();  }  }  } 

Output:  

java standard parametre
A
    beskyttet void drain():Dræn alle bufferlagrede data i ObjectOutputStream. Ligner flush, men forplanter ikke flush til den underliggende strøm. 
  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();  } } 
    beskyttet boolesk enableReplaceObject(boolean enable):Aktiver strømmen til at udskifte objekter i strømmen. Når den er aktiveret, kaldes replaceObject-metoden for hvert objekt, der serialiseres. 
    Hvis aktivering er sandt, og der er installeret en sikkerhedsmanager, kalder denne metode først sikkerhedsmanagerens checkPermission-metode med en SerializablePermission('enableSubstitution') tilladelse for at sikre, at det er ok at aktivere streamen til at erstatte objekter i streamen. 
  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();  } } 

Output:  

false A
    ObjectOutputStream.PutField putFields():Hent det objekt, der bruges til at buffere vedvarende felter, der skal skrives til strømmen. Felterne vil blive skrevet til strømmen, når writeFields-metoden kaldes. 
  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();  } } 

Output:  

A
    beskyttet objekt replaceObject(Object obj):Denne metode vil tillade betroede underklasser af ObjectOutputStream at erstatte et objekt med et andet under serialisering. Erstatning af objekter er deaktiveret, indtil enableReplaceObject kaldes. EnableReplaceObject-metoden kontrollerer, at den strøm, der anmoder om at udføre erstatning, kan stoles på. Den første forekomst af hvert objekt skrevet ind i serialiseringsstrømmen sendes til replaceObject. Efterfølgende referencer til objektet erstattes af objektet returneret af det oprindelige kald til replaceObject. For at sikre, at objekters private tilstand ikke utilsigtet afsløres, må kun betroede streams bruge replaceObject. 
    Denne metode kaldes kun én gang, når hvert objekt først stødes på. Alle efterfølgende referencer til objektet vil blive omdirigeret til det nye objekt. Denne metode skal returnere det objekt, der skal erstattes, eller det oprindelige objekt.
    Null kan returneres som det objekt, der skal erstattes, men kan forårsage NullReferenceException i klasser, der indeholder referencer til det originale objekt, da de muligvis forventer et objekt i stedet for 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();  } } 

Output:  

GeeksforGeeks
    void useProtocolVersion(int version):Angiv streamprotokolversionen, der skal bruges, når streamen skrives. Denne rutine giver en hook for at gøre det muligt for den aktuelle version af Serialization at skrive i et format, der er bagudkompatibelt med en tidligere version af streamformatet.
    Der vil blive gjort alt for at undgå at indføre yderligere baglæns inkompatibiliteter; men nogle gange er der ikke noget andet 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();  } } 

Output:  

GeeksforGeeks

Næste artikel: Java.io.ObjectOutputStream-klasse i Java | Sæt 2

gør shell-script eksekverbart


 

Opret quiz