博客
关于我
java序列化_java对象的序列化和反序列化
阅读量:790 次
发布时间: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/

    你可能感兴趣的文章
    【SQLI-Lab】靶场搭建
    查看>>
    Struts2-从值栈获取list集合数据(三种方式)
    查看>>
    推荐几篇近期必看的视觉综述,含GAN、Transformer、人脸超分辨、遥感等
    查看>>
    VTK:可视化之RandomProbe
    查看>>
    block多队列分析 - 2. block多队列的初始化
    查看>>
    Java时间
    查看>>
    不编译只打包system或者vendor image命令
    查看>>
    【编程】C语言入门:1到 100 的所有整数中出现多少个数字9
    查看>>
    flink启动(二)
    查看>>
    pair的用法
    查看>>
    Flex 布局的自适应子项内容过长导致其被撑大问题
    查看>>
    PL/SQL 动态Sql拼接where条件
    查看>>
    Thymeleaf sec:authorize 标签不生效
    查看>>
    测试tensorflow是否安装成功 出现 SyntaxError: invalid syntax的错误
    查看>>
    Boostrap技能点整理之【网格系统】
    查看>>
    javaWeb服务详解(含源代码,测试通过,注释) ——Emp的Dao层
    查看>>
    echarts 基本图表开发小结
    查看>>
    JDK9-15新特性
    查看>>
    TreeSet、TreeMap
    查看>>
    JVM内存模型
    查看>>