1. Serialización y deserialización de Java
La serialización de Java se refiere al proceso de convertir objetos Java en secuencias de bytes; La deserialización de Java se refiere al proceso de restauración de las secuencias de bytes en objetos Java.
2. ¿Por qué se necesitan serialización y deserialización?
Sabemos que cuando dos procesos se comunican de forma remota, pueden enviar varios tipos de datos entre sí, incluidos texto, imágenes, audio, video, etc., y estos datos se transmitirán en la red en forma de secuencias binarias. Entonces, cuando se comunican dos procesos Java, ¿se puede realizar la transmisión de objetos entre los procesos? La respuesta es sí. ¿Cómo hacerlo? Esto requiere serialización y deserialización de Java. En otras palabras, por un lado, el remitente necesita convertir este objeto Java en una secuencia de bytes y luego transmitirlo en la red; Por otro lado, el receptor necesita restaurar el objeto Java de la secuencia de bytes.
Cuando entendemos por qué se necesitan serialización y deserialización de Java, naturalmente pensamos en los beneficios de la serialización de Java. Los beneficios son en primer lugar que se realiza la persistencia de datos. A través de la serialización, los datos se pueden guardar permanentemente en el disco duro (generalmente almacenado en un archivo). En segundo lugar, la serialización se utiliza para realizar una comunicación remota, es decir, transmitir la secuencia de bytes de objetos en la red.
3. Ejemplo:
(1) Serializar y deserializar archivos:
import java.io.*; @SupplesSwarnings ("Serial") La persona de clase implementa serializable {persona pública (nombre de cadena, sexo de cadena, int a age, int altura) {this.name = name; this.sex = sexo; this.age = edad; this.Height = altura; } public String toString () {return "|" + this.name + "|" + this.sex + "|" + this.age + "|" + this.Height + "|"; } nombre de cadena pública; sexo de cuerda pública; Public int Age; Altura pública int; } public class SerialTest {public static void main (string [] args) lanza FileNotFoundException, IOException, ClassNotFoundException {Person P = New Person ("Jim", "Masculino", 28, 194); // Iniciar serialización ObjectOutputStream OOS = new ObjectOutputStream (nuevo FileOutputStream (nuevo archivo ("mytest.txt"))); oos.writeObject (P); // Deserialize ObjectInputStream OIS = new ObjectInputStream (nuevo FileInputStream (nuevo archivo ("mytest.txt")); Persona p1 = (persona) ois.readObject (); System.out.println (p1.ToString ()); }}
(2) Deserialización XML en clase:
import java.io.*; import com.thoughtworks.xstream.xstream; import com.thoughtworks.xstream.io.xml.domdriver; @SupessWarnings ("Serial") class RoadInfo implementa serializable {public int id; MDN público largo; nombre de cadena pública; Público Doble GNL; público doble lat; icono de cadena pública; } @SupplesWarnings ("Serial") class table_list implementa serializable {public string toString () {StringBuffer sb = new StringBuffer (); para (RoadInfo r: secuencia) {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) {secuence = new RoadInfo [Count]; for (int i = 0; i <count; i ++) {secuencia [i] = new RoadInfo (); }} secuencia pública RoadInfo []; } public class xmltest { / ** * @param args * / public static void main (string [] args) lanza la excepción {// TODO Método generado automático stub StringBuffer sb = new StringBuffer (); BufferedReader lector = new BufferedReader (nuevo FileReader (nuevo archivo ("amigo_msg.xml"))); while (true) {string s = lector.readline (); // Leer una línea 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 ()); }}