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:
Metódy:
Syntax : protected void annotateClass(Class cl) throws IOException Parameters: cl - the class to annotate custom data for Throws: IOExceptionJava
//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
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: IOExceptionJava
//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
Syntax : public void close() throws IOException Throws: IOExceptionJava
//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(); } }
3
Syntax : public void defaultWriteObject() throws IOException Throws: IOExceptionJava
//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
Syntax : protected void drain() throws IOException Throws: IOExceptionJava
//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(); } }
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: SecurityExceptionJava
//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
Syntax : public ObjectOutputStream.PutField putFields() throws IOException Returns: an instance of the class Putfield that holds the serializable fields Throws: IOExceptionJava
//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
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: IOExceptionJava
//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
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 IOExceptionJava
//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