面试官:三年工作经验,你连序列化都说不明白?

什么是序列化、反序列化

序列化:把Java对象转换为字节序列的过程。

反序列化:把字节序列恢复为Java对象的过程。

序列化的作用

1、可以把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中;(持久化对象)

2、也可以在网络上传输对象的字节序列;(网络传输对象)

序列化在Java中的用法

在Java中序列化的实现:将需要被序列化的类实现Serializable接口,该接口没有需要实现的方法,实现该接口只是为了标注该对象是可被序列化的,然后使用一个输出流(如:FileOutputStream)来构造一个ObjectOutputStream(对象输出流)对象,接着,使用ObjectOutputStream对象的writeObject(Object obj)方法就可以将参数为obj的对象写出(即保存其状态),要恢复的话则用ObjectInputStream(对象输入流)。

如下为序列化、反序列化简单案例Test01:

import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable; public class Test01 { public static void main(String[] args) { //序列化操作 serializable(); //反序列化操作 deserialization(); } private static void serializable() { try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("object.txt"))) { Person person = new Person(); person.setName("张三"); person.setAge(20); oos.writeObject(person); } catch (IOException e) { e.printStackTrace(); } } private static void deserialization() { try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream("object.txt"))) { Person person = (Person) ois.readObject(); System.out.println(person); } catch (IOException | ClassNotFoundException e) { e.printStackTrace(); } } } //目标类实现Serializable接口 class Person implements Serializable { private static final long serialVersionUID = -2052381772192998351L; private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "Person{" + "name='" + name + '\'' + ", age=" + age + '}'; } }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wsxxfy.html