1. сериализация и десериализация Java
Сериализация Java относится к процессу преобразования объектов Java в байтовые последовательности; Десериализация Java относится к процессу восстановления последовательностей байтов в объекты Java.
2. Почему сериализация и десериализация необходимы
Мы знаем, что когда два процесса общаются дистанционно, они могут отправлять друг другу различные типы данных, включая текст, изображения, аудио, видео и т. Д., И эти данные будут передаваться в сети в форме двоичных последовательностей. Поэтому, когда два Java -процесса общаются, можно ли реализовать передачу объекта между процессами? Ответ да. Как это сделать? Это требует сериализации Java и десериализации. Другими словами, с одной стороны, отправитель должен преобразовать этот объект Java в последовательность байтов, а затем передавать его в сети; С другой стороны, приемник должен восстановить объект Java из последовательности байтов.
Когда мы понимаем, почему необходима сериализация Java и десериализация, мы, естественно, думаем о преимуществах сериализации Java. Преимущества, во -первых, реализуются постоянство данных. Благодаря сериализации данные могут быть постоянно сохранены на жестком диске (обычно хранятся в файле). Во -вторых, сериализация используется для реализации удаленной связи, то есть передачи байтовой последовательности объектов в сети.
3. Пример:
(1) Сериализуйте и десериализуйте файлы:
импортировать java.io.*; @Suppresswarnings ("serial") класс человек реализует serializable {public person (String name, String sex, int oge, int hiep) {this.name = name; this.sex = sex; this.age = возраст; this.height = высота; } public String toString () {return "|" + this.name + "|" + this.sex + "|" + this.age + "|" + this.height + "|"; } public String name; публичный строковый секс; Public Int Age; Public Int Height; } public Class SerialTest {public static void main (string [] args) бросает filenotfoundexception, ioexception, classnotfoundexception {person p = новый человек ("Jim", "Male", 28, 194); // Запуск сериализации objectOutputStream oos = new objectOutputStream (new FileOutputStream (новый файл ("myTest.txt"))); OOS.WriteObject (P); // deserialize objectInputStream OIS = new ObjectInputStream (new FileInputStream (новый файл ("mytest.txt"))); Человек p1 = (человек) ois.readobject (); System.out.println (p1.toString ()); }}
(2) Десериализация XML в класс:
импортировать java.io.*; Импорт com.thoutworks.xstream.xstream; Import Com.ThoughTworks.xstream.io.xml.Domdriver; @Suppresswarnings ("serial") class roadinfo реализует сериализуемые {public int id; Public Long MDN; Общественное название строки; Public Double LNG; общественный двойной лат; общедоступный значок строки; } @Suppresswarnings ("serial") class table_list реализует serializable {public String toString () {stringBuffer sb = new StringBuffer (); для (RoadInfo R: последовательность) {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"); } вернуть 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) бросает исключение {// todo автоматически генерируемого метода StringBuffer sb = new StringBuffer (); BufferedReader Reader = new BufferedReader (новый FileReader (новый файл ("rows_msg.xml"))); while (true) {string s = reader.readline (); // Читать строку 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 ()); }}