java序列化和反序列化
序列化:就是将java对象转化成字节序列的过程。比如:将对象(内存)序列化到磁盘。
反序列化:就是将字节序列转化成对象的过程。比如:从磁盘反序列化到内存。
序列化:指把堆内存中的 Java 对象数据,通过某种方式把对象存储到磁盘文件中或者传递给其他网络节点(在网络上传输)。这个过程称为序列化。通俗来说就是将数据结构或对象转换成二进制串的过程
反序列化:把磁盘文件中的对象数据或者把网络节点上的对象数据,恢复成Java对象模型的过程。也就是将在序列化过程中所生成的二进制串转换成数据结构或者对象的过程
先创建一个实体类,实现Serializable接口
public class Person implements Serializable {
private static final long serialVersionUID = 8428798474641047929L;
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
再创建一个序列化和反序列化的工具类
public class SerializationUtil {
//.bin后缀代表二进制文件
private static String FILE_NAME = "D:/obj.bin";
/**
* 序列化
*/
public static void writeObject(Serializable s) {
try {
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(FILE_NAME));
oos.writeObject(s);
oos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 反序列化
*/
public static Object readObject() {
Object obj = null;
try {
ObjectInput input = new ObjectInputStream(new FileInputStream(FILE_NAME));
obj = input.readObject();
input.close();
} catch (Exception e) {
e.printStackTrace();
}
return obj;
}
}
然后main方法测试
public class Main {
public static void main(String[] args) {
//序列化
Person person = new Person();
person.setName("混世魔王");
SerializationUtil.writeObject(person);
Person p = (Person) SerializationUtil.readObject();
System.out.println("name = " + p.getName());
}
}