【面试问题】什么是序列化?什么是反序列化?

简介: 【1月更文挑战第27天】【面试问题】什么是序列化?什么是反序列化?

序列化(Serialization)和反序列化(Deserialization)是 Java 中用于在对象和字节之间进行转换的过程。

序列化:

序列化是将对象的状态转换为字节流的过程。在序列化过程中,对象的属性和数据被转换成字节的形式,以便存储在文件中、在网络上传输或在内存中进行持久化。Java 提供了 java.io.Serializable 接口,通过实现这个接口,一个类可以表明它是可序列化的。序列化可以使用 ObjectOutputStream 类来实现。

importjava.io.FileOutputStream;
importjava.io.IOException;
importjava.io.ObjectOutputStream;
importjava.io.Serializable;
classPersonimplementsSerializable {
privateStringname;
privateintage;
publicPerson(Stringname, intage) {
this.name=name;
this.age=age;
    }
// Getters and setters}
publicclassSerializationExample {
publicstaticvoidmain(String[] args) {
Personperson=newPerson("John", 25);
try (ObjectOutputStreamoos=newObjectOutputStream(newFileOutputStream("person.ser"))) {
oos.writeObject(person);
System.out.println("Object serialized successfully.");
        } catch (IOExceptione) {
e.printStackTrace();
        }
    }
}

反序列化:

反序列化是将字节流转换为对象的过程。在反序列化过程中,字节流中的数据被重新转换为对象的状态。Java 提供了 ObjectInputStream 类,用于实现反序列化。同样,被反序列化的类需要实现 java.io.Serializable 接口。

importjava.io.FileInputStream;
importjava.io.IOException;
importjava.io.ObjectInputStream;
publicclassDeserializationExample {
publicstaticvoidmain(String[] args) {
try (ObjectInputStreamois=newObjectInputStream(newFileInputStream("person.ser"))) {
Personperson= (Person) ois.readObject();
System.out.println("Object deserialized successfully.");
System.out.println("Name: "+person.getName() +", Age: "+person.getAge());
        } catch (IOException|ClassNotFoundExceptione) {
e.printStackTrace();
        }
    }
}

在上述例子中,Person 类实现了 Serializable 接口,使得该类的对象可以被序列化和反序列化。在序列化过程中,对象被写入到文件中(person.ser),而在反序列化过程中,从文件中读取字节流并转换成对象。

注意:序列化和反序列化并不仅仅限于文件操作,还可以在网络通信中用于对象的传输,或者在分布式系统中用于对象的存储和恢复。

相关文章
|
1月前
|
存储 C#
C#中的序列化和反序列化
C#中的序列化和反序列化
12 0
|
1月前
|
存储 Java 数据库
|
3月前
|
Go
golang力扣leetcode 297.二叉树的序列化与反序列化
golang力扣leetcode 297.二叉树的序列化与反序列化
24 0
|
4月前
|
存储 算法
【每日一题Day316】LC449序列化和反序列化二叉搜索树 | BFS
【每日一题Day316】LC449序列化和反序列化二叉搜索树 | BFS
25 0
|
3月前
|
存储 算法 C++
leetcode-297:二叉树的序列化与反序列化
leetcode-297:二叉树的序列化与反序列化
22 1
|
3月前
|
分布式计算 Java 大数据
IO流【Java对象的序列化和反序列化、File类在IO中的作用、装饰器模式构建IO流体系、Apache commons-io工具包的使用】(四)-全面详解(学习总结---从入门到深化)
IO流【Java对象的序列化和反序列化、File类在IO中的作用、装饰器模式构建IO流体系、Apache commons-io工具包的使用】(四)-全面详解(学习总结---从入门到深化)
53 0
|
14天前
|
存储 Java
Java输入输出:解释一下序列化和反序列化。
Java中的序列化和反序列化是将对象转换为字节流和反之的过程。ObjectOutputStream用于序列化,ObjectInputStream则用于反序列化。示例展示了如何创建一个实现Serializable接口的Person类,并将其序列化到文件,然后从文件反序列化回Person对象。
24 5
|
1月前
|
存储 C#
C#中的序列化和反序列化案例
C#中的序列化和反序列化案例
13 0
|
1月前
|
JSON Java Maven
使用Jackson进行 JSON 序列化和反序列化
使用Jackson进行 JSON 序列化和反序列化
27 0
|
1月前
|
存储 JSON 网络协议
【计算机网络】序列化,反序列化和初识协议
【计算机网络】序列化,反序列化和初识协议