java:object_serialization

Differences

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

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
Last revision Both sides next revision
java:object_serialization [2017/02/17 13:38]
gthanos
java:object_serialization [2017/02/17 14:07]
gthanos
Line 42: Line 42:
 Θα επιχειρήσουμε να κάνουμε serialize ένα αντικείμενο της παρακάτω κλάσης Employee. Θα επιχειρήσουμε να κάνουμε serialize ένα αντικείμενο της παρακάτω κλάσης Employee.
 <code java Employee.java>​ <code java Employee.java>​
-import ​java.util.*;​+iimport ​java.util.*;​
  
 public class Employee implements java.io.Serializable { public class Employee implements java.io.Serializable {
Line 57: Line 57:
       str+="​AMKA:​ " + AMKA+"​\n";​       str+="​AMKA:​ " + AMKA+"​\n";​
       str+="​Salary:​ " + salary+"​\n";​       str+="​Salary:​ " + salary+"​\n";​
-      str+="​Next:​ " + next.name+"​\n";​ +      ​if(next != null) 
-      Iterator<​Employee>​ it = list.iterator();​ +        ​str+="​Next:​ " + next.name+"​\n";​ 
-      if( it.hasNext() ) { +      ​ 
-        str+="​List:​ "; +      if( list != null) { 
-      +        ​Iterator<​Employee>​ it = list.iterator();​ 
-      while( it.hasNext() ) { +        if( it.hasNext() ) { 
-        str+= it.next().name+",​ ";+          str+="​List:​ "; 
 +        
 +        while( it.hasNext() ) { 
 +          str+= it.next().name+", ​"; 
 +        } 
 +        str+="​\n";
       }       }
-      str+="​\n";​ 
       return str;       return str;
    }    }
Line 73: Line 77:
 Ας υποθέσουμε ότι κατασκευάζουμε δύο τέτοια αντικείμενα τα οποία τα μετατρέπουμε σε μία σειρά από bytes και τα αποθηκεύουμε στο αρχείο **employees.ser** (υποθέτουμε ότι έχετε την δυνατότητα να δημιουργήσετε το αρχείο στον τρέχοντα κατάλογο). Ο κώδικας μετατροπής και αποθήκευσης δίνεται παρακάτω:​ Ας υποθέσουμε ότι κατασκευάζουμε δύο τέτοια αντικείμενα τα οποία τα μετατρέπουμε σε μία σειρά από bytes και τα αποθηκεύουμε στο αρχείο **employees.ser** (υποθέτουμε ότι έχετε την δυνατότητα να δημιουργήσετε το αρχείο στον τρέχοντα κατάλογο). Ο κώδικας μετατροπής και αποθήκευσης δίνεται παρακάτω:​
  
-<code java>+<​code ​java SerializeDemo.java>
 import java.io.*; import java.io.*;
 import java.util.*;​ import java.util.*;​
Line 119: Line 123:
  
 Μεταγλωττίστε και τρέξτε το πρόγραμμα και επιβεβαιώστε ότι δημιουργήθηκε το αρχείο **employees.ser**. Μεταγλωττίστε και τρέξτε το πρόγραμμα και επιβεβαιώστε ότι δημιουργήθηκε το αρχείο **employees.ser**.
 +
 +===== Παράδειγμα Deserialization =====
 +
 +Ας υποθέσουμε ότι αφού αποθηκεύσαμε τα αντικείμενα στο αρχείο **employees.ser** θέλουμε να τα ανακτήσουμε ως λειτουργικά αντικείμενα σε ένα νέο πρόγραμμα. Ας δούμε το πρόγραμμα αυτό, το οποίο εκτυπώνει το περιεχόμενο τους με την βοήθεια της μεθόδου toString().
 +
 +<code java DeserializeDemo.java>​
 +import java.io.*;
 +public class DeserializeDemo {
 +
 +   ​public static void main(String [] args) {
 +      Employee e, e1;
 +      try {
 +         ​FileInputStream fileIn = new FileInputStream("​employees.ser"​);​
 +         ​ObjectInputStream in = new ObjectInputStream(fileIn);​
 +         e = (Employee) in.readObject();​
 +         e1 = (Employee) in.readObject();​
 +         ​in.close();​
 +         ​fileIn.close();​
 +      }catch(IOException i) {
 +         ​i.printStackTrace();​
 +         ​return;​
 +      }catch(ClassNotFoundException ex) {
 +         ​System.out.println("​Employee class not found"​);​
 +         ​ex.printStackTrace();​
 +         ​return;​
 +      }
 +      ​
 +      System.out.println(e);​
 +      System.out.println(e1); ​     ​
 +   }
 +}
 +</​code>​
 +
 +<WRAP todo 80% center round>
 +Στο παραπάνω παράδειγμα δηλώστε τα τελευταία τρία πεδία της κλάσης Employee ως transient, oπως παρακάτω. Μεταγλωττίστε και τρέξτε ξανά τις κλάσεις **SerializeDemo** και **DeserializeDemo**. Τι παρατηρείτε;​
 +</​WRAP>​
 +
 +<code java Employee.java>​
 +import java.util.*;​
 +
 +public class Employee implements java.io.Serializable {
 +   ​public String name;
 +   ​public String address;
 +   ​public int AMKA;
 +   ​public transient double salary;
 +   ​public transient Employee next;
 +   ​public transient ArrayList<​Employee>​ list;
 +   
 +   ​public String toString() {
 +      String str = "Name: " + name+"​\n";​
 +      str+="​Address:​ " + address+"​\n";​
 +      str+="​AMKA:​ " + AMKA+"​\n";​
 +      str+="​Salary:​ " + salary+"​\n";​
 +      if(next != null)
 +        str+="​Next:​ " + next.name+"​\n";​
 +      ​
 +      if( list != null) {
 +        Iterator<​Employee>​ it = list.iterator();​
 +        if( it.hasNext() ) {
 +          str+="​List:​ ";
 +        }
 +        while( it.hasNext() ) {
 +          str+= it.next().name+",​ ";
 +        }
 +        str+="​\n";​
 +      }
 +      return str;
 +   }
 +}
 +</​code>​
 +
 +
 +|Προηγούμενο:​ [[ :​java:​write_to_file | Γράφοντας σε αρχείο ]] | [[ :toc | Περιεχόμενα ]] | Επόμενο:​ [[ :​java:​generics | Παραμετρικοί τύποι δεδομένων ]] |
  
  
java/object_serialization.txt · Last modified: 2017/02/17 14:11 by gthanos