1. Java serialization and deserialization
Java serialization refers to the process of converting Java objects into byte sequences; Java deserialization refers to the process of restoring the byte sequences into Java objects.
2. Why serialization and deserialization are needed
We know that when two processes communicate remotely, they can send various types of data to each other, including text, pictures, audio, video, etc., and these data will be transmitted on the network in the form of binary sequences. So when two Java processes communicate, can object transmission be realized between processes? The answer is yes. How to do it? This requires Java serialization and deserialization. In other words, on the one hand, the sender needs to convert this Java object into a sequence of bytes and then transmit it on the network; on the other hand, the receiver needs to restore the Java object from the sequence of bytes.
When we understand why Java serialization and deserialization are needed, we naturally think about the benefits of Java serialization. The benefits are firstly that data persistence is realized. Through serialization, the data can be permanently saved on the hard disk (usually stored in a file). Secondly, serialization is used to realize remote communication, that is, transmitting the byte sequence of objects on the network.
3. Example:
(1) Serialize and deserialize files:
import java.io.*; @SuppressWarnings("serial") class Person implements Serializable { public Person(String name, String sex, int age, int height) { this.name = name; this.sex = sex; this.age = age; this.height = height; } public String toString() { return "|" + this.name + "|" + this.sex + "|" + this.age + "|" + this.height + "|"; } public String name; public String sex; public int age; public int height; } public class SerialTest { public static void main(String[] args) throws FileNotFoundException, IOException, ClassNotFoundException { Person p = new Person("Jim", "male", 28, 194); // Start serializing ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream( new File("myTest.txt"))); oos.writeObject(p); // Deserialize ObjectInputStream ois = new ObjectInputStream(new FileInputStream(new File("myTest.txt"))); Person p1 = (Person) ois.readObject(); System.out.println(p1.toString()); } }
(2) XML deserialization into class:
import java.io.*; import com.thoughtworks.xstream.XStream; import com.thoughtworks.xstream.io.xml.DomDriver; @SuppressWarnings("serial") class RoadInfo implements Serializable { public int id; public long MDN; public String NAME; public double LNG; public double LAT; public String ICON; } @SuppressWarnings("serial") class table_list implements Serializable { public String toString() { StringBuffer sb = new StringBuffer(); for (RoadInfo r : sequence) { 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]; for (int i = 0; i < count; i++) { sequence[i] = new RoadInfo(); } } public RoadInfo[] sequence; } public class XMLTest { /** * @param args */ public static void main(String[] args) throws Exception { // TODO Auto-generated method stub StringBuffer sb = new StringBuffer(); BufferedReader reader = new BufferedReader(new FileReader(new File( "friend_msg.xml"))); while (true) { String s = reader.readLine();// Read a line 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()); } }