文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Java中的序列化和反序列化,它们的作用和用途是什么?

2024-11-30 03:49

关注

在 Java 中,序列化(Serialization)是指将对象转换为字节序列的过程,而反序列化(Deserialization)则是指将字节序列转换回对象的过程。序列化和反序列化主要用于在网络传输、持久化存储和进程间通信等场景中,将对象以字节的形式进行传输或存储。

序列化的作用和用途如下:

Java 提供了内置的序列化和反序列化机制,可以通过实现 Serializable 接口来实现对象的序列化和反序列化。Serializable 接口是一个标记接口,没有任何方法,只是用来标识一个类可以被序列化。

下面是一个示例代码,演示了如何在 Java 中进行对象的序列化和反序列化:

import java.io.*;

public class SerializationDemo {

    public static void main(String[] args) {
        // 创建一个对象
        Person person = new Person("John", 25);

        // 将对象序列化到文件中
        serializeObject(person, "person.ser");

        // 从文件中反序列化对象
        Person deserializedPerson = (Person) deserializeObject("person.ser");

        // 打印反序列化后的对象
        System.out.println(deserializedPerson);
    }

    // 将对象序列化到文件
    private static void serializeObject(Object object, String fileName) {
        try (FileOutputStream fileOut = new FileOutputStream(fileName);
             ObjectOutputStream objectOut = new ObjectOutputStream(fileOut)) {
            objectOut.writeObject(object);
            System.out.println("Object serialized successfully.");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    // 从文件中反序列化对象
    private static Object deserializeObject(String fileName) {
        try (FileInputStream fileIn = new FileInputStream(fileName);
             ObjectInputStream objectIn = new ObjectInputStream(fileIn)) {
            Object object = objectIn.readObject();
            System.out.println("Object deserialized successfully.");
            return object;
        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
            return null;
        }
    }

    // 定义一个可序列化的类
    private static class Person implements Serializable {
        private String name;
        private int age;

        public Person(String name, int age) {
            this.name = name;
            this.age = age;
        }

        public String getName() {
            return name;
        }

        public int getAge() {
            return age;
        }

        @Override
        public String toString() {
            return "Person{" +
                    "name='" + name + '\'' +
                    ", age=" + age +
                    '}';
        }
    }
}

在上面的示例代码中,我们创建了一个可序列化的 Person 类,并实现了 Serializable 接口。然后,我们创建了一个 Person 对象,并将其序列化到文件中。接着,我们从文件中反序列化对象,并打印出反序列化后的对象。

需要注意的是,被序列化的类必须实现 Serializable 接口,否则在序列化或反序列化时会抛出 NotSerializableException 异常。另外,被序列化的类的所有属性也必须是可序列化的,否则同样会抛出 NotSerializableException 异常。

序列化和反序列化是将对象转换为字节流和将字节流转换为对象的过程。在 Java 中,可以通过实现 Serializable 接口来实现对象的序列化和反序列化。序列化和反序列化主要用于在网络传输、持久化存储和进程间通信等场景中,将对象以字节的形式进行传输或存储。通过序列化和反序列化,可以实现对象的传输和存储,方便在不同系统、不同进程或不同机器之间进行数据交换和通信。

来源:今日头条内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯