Java中的序列化(Serialization)

举报
赵KK日常技术记录 发表于 2023/06/30 18:02:55 2023/06/30
【摘要】 Java中的序列化(Serialization)序列化是Java中一种将对象转换为字节流的过程,这样可以方便地在网络上传输或存储到磁盘上。反序列化则是将字节流重新转换回对象的过程。本篇文章将详细介绍Java中的序列化以及如何实现序列化和反序列化。 1. 什么是序列化?序列化是将对象的状态信息转换为一系列可存储或传输的字节的过程。通过序列化,我们可以将一个对象保存到文件或者通过网络发送给其他...

Java中的序列化(Serialization)

序列化是Java中一种将对象转换为字节流的过程,这样可以方便地在网络上传输或存储到磁盘上。反序列化则是将字节流重新转换回对象的过程。本篇文章将详细介绍Java中的序列化以及如何实现序列化和反序列化。

1. 什么是序列化?

序列化是将对象的状态信息转换为一系列可存储或传输的字节的过程。通过序列化,我们可以将一个对象保存到文件或者通过网络发送给其他程序。在需要的时候,我们可以将这些字节重新组合成一个对象,从而恢复原来的状态。

2. 如何实现序列化和反序列化?

2.1 实现序列化

要实现序列化,我们需要使用java.io.ObjectOutputStream类。以下是一个简单的示例:

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;

public class SerializationDemo {
    public static void main(String[] args) {
        Person person = new Person("张三", 30);
        try {
            FileOutputStream fileOut = new FileOutputStream("person.ser");
            ObjectOutputStream out = new ObjectOutputStream(fileOut);
            out.writeObject(person);
            out.close();
            fileOut.close();
            System.out.println("Serialized data is saved in person.ser");
        } catch (IOException i) {
            i.printStackTrace();
        }
    }
}

在这个示例中,我们创建了一个Person对象,并将其保存到名为person.ser的文件中。注意,为了能够序列化一个对象,该对象必须实现Serializable接口。如果没有实现该接口,编译器会报错。

2.2 实现反序列化

要实现反序列化,我们需要使用java.io.ObjectInputStream类。以下是一个简单的示例:

import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.Serializable;

public class DeserializationDemo {
    public static void main(String[] args) {
        Person person = null;
        try {
            FileInputStream fileIn = new FileInputStream("person.ser");
            ObjectInputStream in = new ObjectInputStream(fileIn);
            person = (Person) in.readObject();
            in.close();
            fileIn.close();
        } catch (IOException i) {
            i.printStackTrace();
            return; // 如果发生异常,返回null以避免后续处理错误数据的情况发生。
        } catch (ClassNotFoundException c) {
            System.out.println("Person class not found"); // 在这种情况下,输出提示信息。由于我们不知道具体的类名,所以这里只能输出提示信息。在实际应用中,应该根据具体需求进行处理。
        } finally {
            if (person != null) { // 如果成功反序列化了对象,执行后续操作。否则,直接返回。这是为了避免对空对象执行后续操作导致的问题。
                System.out.println("Deserialized Person: " + person); // 输出反序列化后的对象信息。
            } else { // 如果发生异常,输出提示信息。由于我们不知道具体的类名,所以这里只能输出提示信息。在实际应用中,应该根据具体需求进行处理。
                System.out.println("Failed to deserialize Person"); // 在这种情况下,输出提示信息。由于我们不知道具体的类名,所以这里只能输出提示信息。在实际应用中,应该根据具体需求进行处理。
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。