Java-序列化与反序列化
序列化和反序列化的应用:
两个进程在远程通信时,可以发送多种数据,包括文本、图片、音频、视频等,这些数据都是以二进制序列的形式在网络上传输。
java 是面向对象的开发方式,一切都是 java 对象,想要在网络中传输 java 对象,可以使用序列化和反序列化去实现,发送发需要将 java 对象转换为字节序列,然后在网络上传送,接收方收到字符序列后,会通过反序列化将字节序列恢复成 java 对象。
java 序列化的优点:
- 实现了数据的持久化,通过序列化可以把数据持久地保存在硬盘上 (磁盘文件)。
- 利用序列化实现远程通信,在网络上传输字节序列
原生序列化操作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| import java.io.*; public class Main{ public static void main(String[] args) throws IOException { Person p = new Person("haohao", 18, 14); System.out.println(p); SerializableDeamo(p); } public static void SerializableDeamo(Person obj) throws IOException { ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("person.txt")); oos.writeObject(obj); } }
|
Person.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| public class Person { private String name; private int age; private String years; public Person(String name, int age, int years) { this.name = name; this.age = age; this.age = years; System.out.println(name + " " + age + " " + years); } public String toString() { String s = "Name: " + name + " Age: " + age + " Years: " + age; return s; } }
|
反序列化:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| import java.io.FileInputStream; import java.io.IOException; import java.io.ObjectInputStream; public class UnserializableDemo { public static void main(String[] args) throws IOException, ClassNotFoundException { Object obj = unserializeTest("person.txt"); System.out.println(obj); } public static Object unserializeTest(String filename) throws IOException, ClassNotFoundException { try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(filename))) { return ois.readObject(); } } }
|