User Tools

Site Tools


java:object_serialization

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
java:object_serialization [2020/03/09 08:23] – [Παράδειγμα Deserialization] gthanosjava:object_serialization [Unknown date] (current) – external edit (Unknown date) 127.0.0.1
Line 3: Line 3:
 Η Java παρέχει την δυνατότητα μετατροπής ενός αντικειμένου σε μία σειρά από bytes, προκειμένου αυτό στη συνέχεια να αποθηκευτεί σε ένα μέσω μόνιμης αποθήκευσης (π.χ. αρχείο στο filesystem) ή να μεταδοθεί μέσω δικτύου προκειμένου να δημιουργηθεί ένα αντίγραφο του σε απομακρυσμένο σημείο. Η διαδικασία μετατροπής των αντικειμένων σε bytes ονομάζεται **object serialization**. Η Java παρέχει την δυνατότητα μετατροπής ενός αντικειμένου σε μία σειρά από bytes, προκειμένου αυτό στη συνέχεια να αποθηκευτεί σε ένα μέσω μόνιμης αποθήκευσης (π.χ. αρχείο στο filesystem) ή να μεταδοθεί μέσω δικτύου προκειμένου να δημιουργηθεί ένα αντίγραφο του σε απομακρυσμένο σημείο. Η διαδικασία μετατροπής των αντικειμένων σε bytes ονομάζεται **object serialization**.
  
-Αφού ένα αντικείμενο μετατραπεί σε σειρά από bytes μπορούμε να ακολουθήσουμε την αντίστροφη διαδικασία προκειμένου να δημιουργήσουμε ένα αντίγραφο του αντικειμένου. Η διαδικασία "σειριοποίησης" ενός αντικειμένου είναι ανεξάρτητη του JVM που χρησιμοποιούμε πράγμα που σημαίνει ότι ένα αντικείμενο που μεταδίδεται μέσω δικτύου μπορεί να αναπαραχθεί στη μνήμη σε μορφή αντικειμένου σε άλλο JVM/υπολογιστή.+Αφού ένα αντικείμενο μετατραπεί σε σειρά από bytes μπορούμε να ακολουθήσουμε την αντίστροφη διαδικασία προκειμένου να δημιουργήσουμε ένα αντίγραφο του αντικειμένου στο ίδιο ή σε άλλο JVM. Η διαδικασία "σειριοποίησης" ενός αντικειμένου είναι ανεξάρτητη του JVM που χρησιμοποιείται πράγμα που σημαίνει ότι ένα αντικείμενο που μεταδίδεται μέσω δικτύου μπορεί να αναπαραχθεί στη μνήμη σε μορφή αντικειμένου σε άλλο JVM (πιθανόν σε απομακρυσμένο υπολογιστή).
  
-Οι κλάσεις **[[http://docs.oracle.com/javase/7/docs/api/java/io/ObjectInputStream.html|ObjectInputStream]]** και **[[http://docs.oracle.com/javase/7/docs/api/java/io/ObjectOutputStream.html|ObjectOutputStream]]** αποτελούν κλάσεις τύπου **[[http://docs.oracle.com/javase/7/docs/api/java/io/InputStream.html|InputStream]]** και **[[http://docs.oracle.com/javase/7/docs/api/java/io/OutputStream.html|OutputStream]]** υψηλού επιπέδου οι οποίες επιτελούν την διαδικασία της "σειριοποίησης" και "αποσειριοποίησης" των αντικειμένων.+Οι κλάσεις **[[http://docs.oracle.com/javase/7/docs/api/java/io/ObjectInputStream.html|ObjectInputStream]]** και **[[http://docs.oracle.com/javase/7/docs/api/java/io/ObjectOutputStream.html|ObjectOutputStream]]** αποτελούν κλάσεις τύπου **[[http://docs.oracle.com/javase/7/docs/api/java/io/InputStream.html|InputStream]]** και **[[http://docs.oracle.com/javase/7/docs/api/java/io/OutputStream.html|OutputStream]]** αντίστοιχα, οι οποίες επιτελούν την διαδικασία της "σειριοποίησης" και "αποσειριοποίησης" των αντικειμένων.
  
-Από τις μεθόδους της κλάσης **[[http://docs.oracle.com/javase/7/docs/api/java/io/ObjectOutputStream.html|ObjectOutputStream]]** μας ενδιαφέρει η μέθοδος [[http://docs.oracle.com/javase/7/docs/api/java/io/ObjectOutputStream.html#writeObject(java.lang.Object)|writeObject]] η οποία μετατρέπει σε σειρά από bytes το αντικείμενο **obj**+Από τις μεθόδους της κλάσης **[[http://docs.oracle.com/javase/7/docs/api/java/io/ObjectOutputStream.html|ObjectOutputStream]]** μας ενδιαφέρει η μέθοδος [[http://docs.oracle.com/javase/7/docs/api/java/io/ObjectOutputStream.html#writeObject(java.lang.Object)|writeObject]] η οποία μετατρέπει σε σειρά από bytes το αντικείμενο που λαμβάνει ως παράμετρο.
 <code java> <code java>
 public final void writeObject(Object obj) throws IOException public final void writeObject(Object obj) throws IOException
Line 18: Line 18:
 </code> </code>
  
-Αντίστοιχα από τις μεθόδους της κλάσης **[[http://docs.oracle.com/javase/7/docs/api/java/io/ObjectInputStream.html|ObjectInputStream]]** μας ενδιαφέρει η μέθοδος [[http://docs.oracle.com/javase/7/docs/api/java/io/ObjectInputStream.html#readObject()|readObject]] η οποία μετατρέπει σε αντικείμενο μία σειρά από bytes.+Αντίστοιχα από τις μεθόδους της κλάσης **[[http://docs.oracle.com/javase/7/docs/api/java/io/ObjectInputStream.html|ObjectInputStream]]** μας ενδιαφέρει η μέθοδος [[http://docs.oracle.com/javase/7/docs/api/java/io/ObjectInputStream.html#readObject()|readObject]]η οποία μετατρέπει σε αντικείμενο μία σειρά από bytes.
  
 <code java> <code java>
Line 42: Line 42:
 Θα επιχειρήσουμε να κάνουμε serialize ένα αντικείμενο της παρακάτω κλάσης Employee. Θα επιχειρήσουμε να κάνουμε serialize ένα αντικείμενο της παρακάτω κλάσης Employee.
 <code java Employee.java> <code java Employee.java>
-iimport java.util.*;+import java.util.*;
  
 public class Employee implements java.io.Serializable { public class Employee implements java.io.Serializable {
Line 108: Line 108:
       try {       try {
          FileOutputStream fileOut =          FileOutputStream fileOut =
-         new FileOutputStream("./employees.ser");+         new FileOutputStream("employees.ser");
          ObjectOutputStream out = new ObjectOutputStream(fileOut);          ObjectOutputStream out = new ObjectOutputStream(fileOut);
          out.writeObject(e);          out.writeObject(e);
Line 114: Line 114:
          out.close();          out.close();
          fileOut.close();          fileOut.close();
-         System.out.printf("Serialized data is saved in /tmp/employee.ser");+         System.out.printf("Serialized data is saved in file: 'employees.ser'");
       }catch(IOException ex) {       }catch(IOException ex) {
          ex.printStackTrace();          ex.printStackTrace();
Line 124: Line 124:
 Μεταγλωττίστε και τρέξτε το πρόγραμμα και επιβεβαιώστε ότι δημιουργήθηκε το αρχείο **employees.ser**. Μεταγλωττίστε και τρέξτε το πρόγραμμα και επιβεβαιώστε ότι δημιουργήθηκε το αρχείο **employees.ser**.
  
-===== Παράδειγμα Deserialization =====+===== Deserialization =====
  
 Ας υποθέσουμε ότι αφού αποθηκεύσαμε τα αντικείμενα στο αρχείο **employees.ser** θέλουμε να τα ανακτήσουμε ως λειτουργικά αντικείμενα σε ένα νέο πρόγραμμα. Ας δούμε το πρόγραμμα αυτό, το οποίο εκτυπώνει το περιεχόμενο τους με την βοήθεια της μεθόδου toString(). Ας υποθέσουμε ότι αφού αποθηκεύσαμε τα αντικείμενα στο αρχείο **employees.ser** θέλουμε να τα ανακτήσουμε ως λειτουργικά αντικείμενα σε ένα νέο πρόγραμμα. Ας δούμε το πρόγραμμα αυτό, το οποίο εκτυπώνει το περιεχόμενο τους με την βοήθεια της μεθόδου toString().
Line 193: Line 193:
 } }
 </code> </code>
- 
  
 |Προηγούμενο: [[ :java:write_to_file | Γράφοντας σε αρχείο ]] | [[ :toc | Περιεχόμενα ]] | Επόμενο: [[ :java:sockets | Εγγραφή και ανάγνωση από Sockets ]] | |Προηγούμενο: [[ :java:write_to_file | Γράφοντας σε αρχείο ]] | [[ :toc | Περιεχόμενα ]] | Επόμενο: [[ :java:sockets | Εγγραφή και ανάγνωση από Sockets ]] |
java/object_serialization.1583742185.txt.gz · Last modified: 2020/03/09 08:23 (external edit)