什么是序列化
序列化是将数据结构或对象,转换为可持久化或可传输的格式的过程,通常是将其转换为二进制或文本表示。
序列化的作用
序列化的作用,主要体现在如下几点:
1.方便传输
序列化允许将数据转换为可传输的格式,以便在网络上或不同进程之间进行数据传输。
2.数据持久化
通过序列化,可以将数据保存到磁盘上,以便在应用程序重启时重新加载。
3.跨平台数据交换
序列化有助于在不同平台或编程语言之间交换数据,因为序列化后的数据通常是与编程语言无关的格式。
序列化的方式
序列化的方式可以分为以下几种:
1.二进制序列化
将数据转换为二进制格式,通常用于在同一平台上的进程间通信,或持久化。
常见的二进制序列化库和格式包括:Protocol Buffers(ProtoBuf)、MessagePack、BSON等。
2.文本序列化
文本序列化是将数据转换为文本格式的过程,通常使用可读性较好的字符表示。
将数据转换为文本格式,通常使用:JSON、XML等格式,更容易阅读和理解,但通常比二进制格式占用更多的空间。
3.Protocol Buffers(ProtoBuf)
Protocol Buffers是一种高效的二进制序列化格式,由Google开发,具有紧凑的数据编码和高性能的编码和解码过程。
支持多种编程语言,用于高性能数据传输和存储。
4.BSON(Binary JSON)
BSON是一种二进制的JSON扩展,通常用于NoSQL数据库MongoDB中,支持多种数据类型和嵌套文档。
不同的序列化方式在不同场景下都有自己的用途和优势,具体的选择取决于应用程序的需求,包括性能、可读性、跨平台兼容性和与其他系统的集成需求。
序列化的使用
序列化是将对象转换为可存储或可传输的格式,然后再将其还原为原始对象的过程。
以下是序列化的一般使用步骤的示例,以Java为例:
1.创建可序列化的类
创建可序列化的类(在这里是 Person 类),该类需要实现 Serializable 接口。
import java.io.Serializable; public class Person implements Serializable { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } // 省略 getter 和 setter 方法 }
2.序列化对象
import java.io.*; public class SerializationExample { public static void main(String[] args) { // 创建一个可序列化的对象 Person person = new Person("Alice", 30); // 序列化对象到文件 try (FileOutputStream fileOut = new FileOutputStream("person.ser"); ObjectOutputStream out = new ObjectOutputStream(fileOut)) { out.writeObject(person); System.out.println("Person object has been serialized and saved to person.ser"); } catch (IOException e) { e.printStackTrace(); } } }
3.反序列化对象
import java.io.*; public class DeserializationExample { public static void main(String[] args) { // 反序列化对象 try (FileInputStream fileIn = new FileInputStream("person.ser"); ObjectInputStream in = new ObjectInputStream(fileIn)) { // 从文件中读取对象并还原为Person对象 Person deserializedPerson = (Person) in.readObject(); System.out.println("Person object has been deserialized from person.ser"); System.out.println("Deserialized Person: " + deserializedPerson); } catch (IOException | ClassNotFoundException e) { e.printStackTrace(); } } }
序列化的总结
序列化是一种将数据转换为可持久化或可传输格式的重要技术,有助于数据在不同环境中传输、存储和交换。
它的主要作用包括数据传输、数据持久化、跨平台数据交换和数据备份。
序列化的方式可以是二进制或文本,具体取决于应用的需求和约定。
在使用序列化时,需要注意数据的版本兼容性、安全性和性能等因素。
mikechen
mikechen睿哥,10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!

后台回复【架构】即可获取《阿里架构师进阶专题全部合集》,后台回复【面试】即可获取《史上最全阿里Java面试题总结》