1. Sérialisation et désérialisation Java
La sérialisation Java fait référence au processus de conversion d'objets Java en séquences d'octets; La désérialisation Java fait référence au processus de restauration des séquences d'octets en objets Java.
2. Pourquoi la sérialisation et la désérialisation sont nécessaires
Nous savons que lorsque deux processus communiquent à distance, ils peuvent se envoyer différents types de données, y compris le texte, les images, l'audio, la vidéo, etc., et ces données seront transmises sur le réseau sous forme de séquences binaires. Ainsi, lorsque deux processus Java communiquent, la transmission des objets peut-elle être réalisée entre les processus? La réponse est oui. Comment faire? Cela nécessite une sérialisation et une désérialisation Java. En d'autres termes, d'une part, l'expéditeur doit convertir cet objet Java en une séquence d'octets, puis le transmettre sur le réseau; D'un autre côté, le récepteur doit restaurer l'objet Java à partir de la séquence des octets.
Lorsque nous comprenons pourquoi la sérialisation et la désérialisation Java sont nécessaires, nous pensons naturellement aux avantages de la sérialisation Java. Les avantages sont d'abord que la persistance des données est réalisée. Grâce à la sérialisation, les données peuvent être enregistrées en permanence sur le disque dur (généralement stocké dans un fichier). Deuxièmement, la sérialisation est utilisée pour réaliser une communication à distance, c'est-à-dire transmettant la séquence d'octets d'objets sur le réseau.
3. Exemple:
(1) sérialiser et désérialiser les fichiers:
importer java.io. *; @SuppressWarnings ("Serial") La personne de classe implémente Serializable {Public Person (String Name, String Sex, int Age, int height) {this.name = name; this.sex = sexe; this.age = âge; this.height = hauteur; } public String toString () {return "|" + this.name + "|" + this.sex + "|" + this.age + "|" + this.height + "|"; } Nom de la chaîne publique; Sexe public à cordes; L'âge public; Public Int Hight; } public class SerialTest {public static void main (String [] args) lève filenotfoundException, ioException, classNotFoundException {personne p = new personne ("jim", "mâle", 28, 194); // Démarrer le sérialisation d'ObjectOutputStream OOS = new ObjectOutputStream (new FileOutputStream (nouveau fichier ("myTest.txt"))); oos.writeObject (p); // Desérialize ObjectInputStream ois = new ObjectInputStream (new FileInputStream (nouveau fichier ("myTest.txt"))); Personne p1 = (personne) ois.readObject (); System.out.println (p1.toString ()); }}
(2) désérialisation XML en classe:
importer java.io. *; import com.thoughtworks.xstream.xstream; import com.thoughtworks.xstream.io.xml.domdriver; @SuppressWarnings ("Serial") classe RoadInfo implémente Serializable {public int id; public long MDN; nom de chaîne publique; Double GNL public; double double lat; Icône de chaîne publique; } @SuppressWarnings ("Serial") classe Table_List implémente Serializable {public String toString () {StringBuffer sb = new StringBuffer (); pour (roadinfo r: séquence) {sb.append ("|"); SB.APPEND (R.ID); SB.APPEND ("|"); SB.APPEND (R.MDN); SB.APPEND ("|"); SB.APPEND (R.Name); SB.APPEND ("|"); SB.APPEND (R.LNG); SB.APPEND ("|"); SB.APPEND (R.LAT); SB.APPEND ("|"); SB.APPEND (R.ICON); sb.append ("| / n"); } return sb.toString (); } public table_list (int count) {Sequence = new RoadInfo [count]; pour (int i = 0; i <count; i ++) {séquence [i] = new roadInfo (); }} séquence publique RoadInfo []; } classe publique xmltest {/ ** * @param args * / public static void main (string [] args) lève exception {// todo méthode générée automatiquement stub stringbuffer sb = new StringBuffer (); BufferedReader Reader = new BufferedReader (nouveau FileReader (nouveau fichier ("ami_msg.xml"))); while (true) {string s = reader.readline (); // lire une ligne if (s == null) {break; } sb.append (s); } Xstream xs = new xstream (new DomDriver ()); table_list db = (table_list) xs.fromxml (sb.toString ()); System.out.println (db.toString ()); }}