序列化详解(作用方式及使用示例)

序列化详解(作用方式及使用示例)-mikechen

什么是序列化

序列化是将数据结构或对象,转换为可持久化或可传输的格式的过程,通常是将其转换为二进制或文本表示。

 

序列化的作用

序列化的作用,主要体现在如下几点:

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面试题总结

评论交流
    说说你的看法