Σε αυτό το σεμινάριο, θα μάθουμε για το Java ObjectOutputStream και τις μεθόδους του με τη βοήθεια παραδειγμάτων.
Η ObjectInputStream
τάξη της java.io
συσκευασίας μπορεί να χρησιμοποιηθεί για να διαβάσει τα αντικείμενα που ήταν προηγουμένως γραφτεί από ObjectOutputStream
.
Επεκτείνει την InputStream
αφηρημένη τάξη.
Πριν μάθετε για την ObjectInputStream
τάξη, βεβαιωθείτε ότι γνωρίζετε για την κλάση ObjectOutputStream.
Εργασία του ObjectInputStream
Χρησιμοποιείται ObjectInputStream
κυρίως για την ανάγνωση δεδομένων που γράφτηκαν από το ObjectOutputStream
.
Βασικά, ObjectOutputStream
μετατρέπει τα αντικείμενα Java σε αντίστοιχες ροές. Αυτό είναι γνωστό ως σειριοποίηση. Αυτές οι μετατρεπόμενες ροές μπορούν να αποθηκευτούν σε αρχεία ή να μεταφερθούν μέσω δικτύων.
Τώρα, αν χρειαστεί να διαβάσουμε αυτά τα αντικείμενα, θα χρησιμοποιήσουμε το ObjectInputStream
που θα μετατρέψει τις ροές σε αντίστοιχα αντικείμενα. Αυτό είναι γνωστό ως αποεστεροποίηση.
Δημιουργήστε ένα ObjectInputStream
Για να δημιουργήσουμε μια ροή εισόδου αντικειμένου, πρέπει java.io.ObjectInputStream
πρώτα να εισαγάγουμε το πακέτο. Μόλις εισαγάγουμε το πακέτο, εδώ είναι πώς μπορούμε να δημιουργήσουμε μια ροή εισόδου.
// Creates a file input stream linked with the specified file FileInputStream fileStream = new FileInputStream(String file); // Creates an object input stream using the file input stream ObjectInputStream objStream = new ObjectInputStream(fileStream);
Στο παραπάνω παράδειγμα, έχουμε δημιουργήσει μια ροή εισόδου αντικειμένου με το όνομα objStream που συνδέεται με τη ροή εισαγωγής αρχείου με το όνομα FileStream.
Τώρα, το objStream
δοχείο μπορεί να χρησιμοποιηθεί για την ανάγνωση αντικειμένων από το αρχείο.
Μέθοδοι του ObjectInputStream
Η ObjectInputStream
τάξη παρέχει υλοποιήσεις διαφορετικών μεθόδων που υπάρχουν στην InputStream
τάξη.
read () Μέθοδος
read()
- διαβάζει ένα byte δεδομένων από τη ροή εισόδουreadBoolean()
- διαβάζει δεδομένα σε δυαδική μορφήreadChar()
- διαβάζει δεδομένα σε μορφή χαρακτήραreadInt()
- διαβάζει δεδομένα σε ακέραια μορφήreadObject()
- διαβάζει το αντικείμενο από τη ροή εισόδου
Παράδειγμα 1: Java ObjectInputStream
Ας δούμε πώς μπορούμε να χρησιμοποιήσουμε την ObjectInputStream
τάξη για να διαβάσουμε αντικείμενα γραμμένα από την ObjectOutputStream
τάξη.
import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; class Main ( public static void main(String() args) ( int data1 = 5; String data2 = "This is programiz"; try ( FileOutputStream file = new FileOutputStream("file.txt"); ObjectOutputStream output = new ObjectOutputStream(file); // Writing to the file using ObjectOutputStream output.writeInt(data1); output.writeObject(data2); FileInputStream fileStream = new FileInputStream("file.txt"); // Creating an object input stream ObjectInputStream objStream = new ObjectInputStream(fileStream); //Using the readInt() method System.out.println("Integer data :" + objStream.readInt()); // Using the readObject() method System.out.println("String data: " + objStream.readObject()); output.close(); objStream.close(); ) catch (Exception e) ( e.getStackTrace(); ) ) )
Παραγωγή
Ακέραια δεδομένα: 5 δεδομένα συμβολοσειράς: Πρόκειται για προγραμματισμό
Στο παραπάνω παράδειγμα, χρησιμοποιήσαμε τη μέθοδο readInt()
και τη readObject()
μέθοδο για την ανάγνωση ακέραιων δεδομένων και δεδομένων αντικειμένων από το αρχείο.
Εδώ, χρησιμοποιήσαμε το ObjectOutputStream
για να γράψουμε δεδομένα στο αρχείο. Στη συνέχεια, διαβάσαμε τα δεδομένα από το αρχείο χρησιμοποιώντας το ObjectInputStream
.
Παράδειγμα 2: Java ObjectInputStream
Ας δούμε ένα άλλο πρακτικό παράδειγμα,
import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable; class Dog implements Serializable ( String name; String breed; public Dog(String name, String breed) ( this.name = name; this.breed = breed; ) ) class Main ( public static void main(String() args) ( // Creates an object of Dog class Dog dog = new Dog("Tyson", "Labrador"); try ( FileOutputStream file = new FileOutputStream("file.txt"); // Creates an ObjectOutputStream ObjectOutputStream output = new ObjectOutputStream(file); // Writes objects to the output stream output.writeObject(dog); FileInputStream fileStream = new FileInputStream("file.txt"); // Creates an ObjectInputStream ObjectInputStream input = new ObjectInputStream(fileStream); // Reads the objects Dog newDog = (Dog) input.readObject(); System.out.println("Dog Name: " + newDog.name); System.out.println("Dog Breed: " + newDog.breed); output.close(); input.close(); ) catch (Exception e) ( e.getStackTrace(); ) ) )
Παραγωγή
Όνομα σκύλου: Tyson Dog φυλή: Λαμπραντόρ
Στο παραπάνω παράδειγμα, έχουμε δημιουργήσει
ObjectOutputStream
ονομαστική έξοδος χρησιμοποιώντας τοFileOutputStream
όνομαObjectInputStream
ονομαστική είσοδος χρησιμοποιώντας τοFileInputStream
όνομα fileStream- Ένα αντικείμενο σκυλί της κατηγορίας Dog
Εδώ, στη συνέχεια χρησιμοποιήσαμε τη ροή εξόδου αντικειμένου για να γράψουμε το αντικείμενο στο αρχείο. Και, η ροή εισόδου αντικειμένου για να διαβάσετε το αντικείμενο από το αρχείο.
Σημείωση : Η κατηγορία Dog εφαρμόζει τη Serializable
διεπαφή. Είναι επειδή το ObjectOutputStream
μόνο γράφει τα σειριοποιήσιμα αντικείμενα στη ροή εξόδου.
Άλλες μέθοδοι ObjectInputStream
Μέθοδοι | Περιγραφές |
---|---|
available() | επιστρέφει τον διαθέσιμο αριθμό byte στη ροή εισόδου |
mark() | επισημαίνει τη θέση στη ροή εισόδου μέχρι την οποία έχουν διαβαστεί τα δεδομένα |
reset() | επιστρέφει το στοιχείο ελέγχου στο σημείο της ροής εισόδου όπου ορίστηκε το σήμα |
skipBytes() | παραλείπει και απορρίπτει τα καθορισμένα byte από τη ροή εισόδου |
close() | κλείνει τη ροή εισόδου αντικειμένου |
Για να μάθετε περισσότερα, επισκεφθείτε το Java ObjectInputStream (επίσημη τεκμηρίωση Java).