本期为大家介绍的java培训教程是关于“Java中怎样将数据对象序列化和反序列化?”的内容,相信大家都知道,程序在运行过程中,可能需要将一些数据永久地保存到磁盘上,而数据在Java中都是保存在对象当中的。那么我们要怎样将对象中的数据保存到磁盘上呢?这时就需要使用Java中的对象序列化。

  java培训教程分享:Java中怎样将数据对象序列化和反序列化?

  对象的序列化(Serializable)是指将一个Java对象转换成一个I/O流中字节序列的过程。其目的是为了将对象保存到磁盘中,或允许在网络中直接传输对象。对象序列化机制可以使内存中的Java对象转换成与平台无关的二进制流,既可以将这种二进制流持久地保存在磁盘上,又可以通过网络将这种二进制流传输到另一个网络节点,其他程序在获得了这种二进制流后,还可以将它恢复成原来的Java对象。这种将I/O流中的字节序列恢复为Java对象的过程被称之为反序列化(Deserialize)。

  如果想让某个对象支持序列化机制,那么这个对象所在的类必须是可序列化的。在Java中,可序列化的类必须实现Serializable 或Externalizable两个接口之一。这两个接口实现序列化机制的主要区别如表7-7所示。

  与实现Serializable 接口相比,虽然实现Externalizable 接口可以带来一定性能上的提升,但也将导致编程的复杂度增加。在实际开发时,大部分都是采用实现Serializable 接口的方式来实现序列化的。

  表7-7 实现 Serializable 与实现Externalizable 的对比

  使用Serializable 接口实现序列化非常简单,只需要让目标类实现Serializable 接口即可,无须实现任何方法。例如让Person类实现序列化接口的代码如下:

  public class Person implements Serializable {

  //为该类指定一个serialVersionUID变量值

  private static final long serialVersionUID = 1 L:

  //声明变量

  private int id;

  private String name;

  private int age;

  //此处省略各属性的getter和setter方法

  ⋮

  }

  在上述代码中,Person类实现了Serializable接口,并指定了一个serialVersionUID变量值,该变量值的作用是标识Java类的序列化版本。如果不显式地定义serialVersionUID变量值,那么将由JVM根据类的相关信息计算出一个serialVersionUID变量值。

  小提示:serialVersionUID适用于Java的序列化机制。简单来说,Java的序列化机制是通过判断类的serialVersionUID来验证版本一致性的。在进行反序列化时,JVM会把传来的字节流中的serialVersionUID与本地相应实体类的serialVersionUID进行比较,如果相同就认为是一致的,可以进行反序列化,否则就会出现序列化版本不一致的异常。因此,为了在反序列化时确保序列化版本的兼容性,最好在每一个要序列化的类中加入privatestatic final long serialVersionUID的变量值,具体数值可自定义(默认是1L,系统还可以根据类名、接口名、成员方法及属性等生成的一个64位的哈希字段)。这样,某个对象被序列化之后,即使它所对应的类被修改了,该对象依然可以被正确地反序列化。

java培训教程分享:Java中怎样将数据对象序列化和反序列化?相关推荐

  1. java培训教程分享:Java中用户如何自定义异常?

    我们在学习java技术的时候应该有了解过,在java中是定义了很多的异常类的,虽然这些大量异常类可以帮助我们描述编程时出现的大部分异常情况,但是在程序开发中有时可能需要描述程序中特有的异常情况,例如在 ...

  2. java培训教程分享:Java编写软件代码自动提示功能

    本期的java培训教程分享主要是介绍的java编写软件代码的一个自动提示功能,很多零基础和初学java的同学们对这一块还不是很了解,Eclipse for android 实现代码自动提示智能提示功能 ...

  3. 详解电子表格中的json数据:序列化与反序列化

    从XML到JSON 当下应用开发常见的B/S架构之下,我们会遇到很多需要进行前后端数据传输的场景.而在这个传输的过程中,数据通过何种格式传输.方式是否迅速便捷.书写方式是否简单易学,都成为了程序员在开 ...

  4. Java培训教程:Java中的位移运算符!

    学习Java本来就是一件日积月累的事情,或许你通过自学能掌握一些皮毛技术,通过系统学习学到Java的一些基本大面,但想要做到精通,还是需要自己技术的日积月累和工作经验的不断积累. 今天小千给大家分享的 ...

  5. Java培训教程分享:变量与常量

    在程序执行过程中,其值不能被改变的量称为常量,其值能被改变的量称为变量.变量与常量在编写程序中需要经常使用,本节将详细介绍变量与常量的使用方法. 标识符 标识符(identifier)用于命名变量.常 ...

  6. dubbo中使用kryo进行对象序列化,反序列化时报错

    最近在项目中遇到一个问题,应用部署到tomcat后启动报错,异常的大致意思是反序列话失败.dubbo中开启的序列化方式为kyro,自己对dubbo并不怎么熟悉,迷迷糊糊查了一圈.最后错误原因是因为消费 ...

  7. java培训教程:什么是匿名内部类?怎样创建匿名内部类?

    本期java教程要为大家分享的是关于java中的匿名内部类,相信很多同学在学java技术的时候有了解过,下面我们就来详细的看一下. java培训教程:什么是匿名内部类?怎样创建匿名内部类?匿名内部类是 ...

  8. Java培训教程:”==“和 equals 方法究竟有什么区别?

    在学习java技术过程中,我们会接触到一些变量值的相关知识,本期小编为大家介绍的教程就是关于"=="和 equals 方法究竟有什么区别?来看看下面的详细介绍. Java培训教程: ...

  9. hibernate savealiasentity 保存后id为空_好程序员Java教程分享Java面试题之Hibernate

    好程序员Java教程分享Java面试题之Hibernate 1.简书一下Hibernated的开发流程 第一步:加载Hibernate的配置文件,读取配置文件的参数, 第二步:创建SessionFac ...

最新文章

  1. 社交网络图挖掘4--三角形计数问题
  2. spring框架学习1:搭建测试
  3. Configuration Extensions - 简化配置,让你配置支持变量
  4. mysql数据库 二十一练习题 及答案 (mysql练习题)
  5. 面对安利,谁能笑到最后
  6. 大智慧 软件 开发语言_中科闻歌中标深圳税务局智慧税务中台软件开发服务项目...
  7. 基于Linux的系统的文件/文件夹的权限
  8. js系列:时间格式转成时间戳和比较某个时段是否在另一个时间段内
  9. 计算机组成原理笔记(王道考研) 第一章:计算机系统概述
  10. OCR 脱机手写汉字识别与印刷汉字识别
  11. python利器app怎么查文献-基于Python的参考文献检索工具开发
  12. 身份证识别项目(二)-- 3755个汉字的识别
  13. 淘宝优惠券去哪里领?
  14. 2021起重机作业 (Q)模拟考试题库及软件
  15. 计划了近半年的跳槽,最终是面试四家,过3家……
  16. PDMS.NET窗体
  17. SRE实战手册-基础篇
  18. java、web前端开发日常记录
  19. 教你三步实现CDH到星环TDH的平滑迁移
  20. 使用squid内网代理百度地图

热门文章

  1. iOS通过Plist保存离线调试日志
  2. 蚂蚁金服×西安银行 | 西安银行手机银行App的智能升级之路
  3. ECS 实例网络带宽
  4. 1.3 Quick Start中 Step 7: Use Kafka Connect to import/export data官网剖析(博主推荐)
  5. sys.check_constraints
  6. ExtJS 4.x 得到资源树上任意的节点对象
  7. 网络工程师转售前的条件
  8. SQL Server 性能基线和监控
  9. magento模板区块--首页content区块
  10. CentOS 6.x中目录结构及用途