博客
关于我
java序列化_java对象的序列化和反序列化
阅读量:807 次
发布时间:2023-01-24

本文共 1094 字,大约阅读时间需要 3 分钟。

序列化是将对象的状态保存下来,以便能够在后续恢复该状态或在其他系统中传输。这个过程类似于将复杂的实体数据转化为可传输的二进制流,方便在网络或文件中存储和传输。在Java中,对象序列化是将对象的属性按照特定的格式写入字节流,而反序列化则是将字节流中的数据解码成原来的对象。

要实现对象的序列化,首先需要让目标类实现[ Serializable ]接口。在Java中,默认情况下类的序列化版本会自动为[ serialVersionUID ]生成一个默认的值(通常是一个长整数),这在版本升级时会导致问题。此外,[ transient ]关键字可用于标记不需要序列化的字段,这些字段会被忽略掉。

举一个简单的例子:创建一个学生类实例并序列化它:

Student stu = new Student("001", "大狗", 20, Gender.男);ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("student.obj"));oos.writeObject(stu);oos.close();

反序列化时,可以通过读取字节流并重建对象:

ObjectInputStream ois = new ObjectInputStream(new FileInputStream("student.obj"));Student student = (Student) ois.readObject();System.out.println(student.getName()); // 输出 "大狗"

需要注意的点:

  • 如果类中有自定义的[ serialVersionUID ],需要确保在升级时也更新这个值,否则反序列化会失败。
  • 使用[ transient ]修饰的字段不会被序列化。如果需要持久化所有字段,务必去掉[ transient ]标记。
  • 避免使用[ volatile ]字段,因为它们可能导致序列化过程中内存一致性的问题。
  • 在序列化和反序列化过程中,确保流的对象已经正确关闭,避免资源泄漏。
  • 反序列化时,如果类结构发生了变化(如字段类型或数量改变),反序列化时可能会抛出[ ClassNotFoundException ]或[ InvalidClassException ]。这时候需要检查目标类的定义,确保与序列化文件中的类版本匹配。

    总之,对象序列化是一种强大的持久化方法,能够方便地将复杂对象保存为字节流,实现数据的传输和存储。只要注意版本匹配和字段序列化管理,就能顺利实现反序列化的需求。

    转载地址:http://wleyk.baihongyu.com/

    你可能感兴趣的文章
    Nginx - Header详解
    查看>>
    Nginx - 反向代理、负载均衡、动静分离、底层原理(案例实战分析)
    查看>>
    Nginx - 反向代理与负载均衡
    查看>>
    nginx 1.24.0 安装nginx最新稳定版
    查看>>
    nginx 301 永久重定向
    查看>>
    nginx connect 模块安装以及配置
    查看>>
    nginx css,js合并插件,淘宝nginx合并js,css插件
    查看>>
    Nginx gateway集群和动态网关
    查看>>
    Nginx keepalived一主一从高可用,手把手带你一步一步配置!
    查看>>
    Nginx Location配置总结
    查看>>
    Nginx log文件写入失败?log文件权限设置问题
    查看>>
    Nginx Lua install
    查看>>
    nginx net::ERR_ABORTED 403 (Forbidden)
    查看>>
    Nginx SSL 性能调优
    查看>>
    Nginx SSL私有证书自签,且反代80端口
    查看>>
    Nginx upstream性能优化
    查看>>
    Nginx 中解决跨域问题
    查看>>
    nginx 代理解决跨域
    查看>>
    Nginx 做负载均衡的几种轮询策略分析
    查看>>
    Nginx 入门,一篇搞定!
    查看>>