Serialization(序列化)是将对象以一连串的字节描述的过程;Deserialization(反序列化)是一种将这些字节重建成一个对象的过程。java序列化api提供一种处理对象序列号的标准机制。
java中,一切都是对象,在分布式环境中经常需要将Object从一端网络或设备传到另一端。java序列化机制就是为了解决这个问题而产生的
一个对象能够序列化的前提是实现Serializable接口,这个接口没有方法,更像是一个标记,告诉jvm这个类可以被序列化机制处理。ObjectOutputStream和ObjectInputStream可以用于处理对象的序列化
序列化算法一般会按步骤做如下事情:
1.将对象实例相关的类元数据输出
2.递归地输出类的超类描述知道不再有超类
3.类元数据完了后,开始从最顶层的超类开始输出对象实例的实际数据值
4.从上至下递归输出实例的数据
具体一个对象会序列化成一个怎样的二进制堆,这里不举例
serialVersionUID
java序列化机制是通过类的serialVersionUID来验证版本一致性的。在反序列化时,jvm会把传来的字节流中的serialVersionUID和本地相应实体类的serialVersionUID进行比较,如果相同就认为一致,可以进行反序列化,否则出现InvalidCastException异常
serialVersionUID有两种显式生成方式:
1.默认的1L,比如:private static final long serialVersionUID = 1L;
2.根据类名、接口名、成员方法、属性等来生成一个64位的哈希字段 = xxxL;
当实现Serializable接口对象没有显式定义一个serialVersionUID时,java序列化会根据编译的Class自动生成一个serialVersionUID,这种情况下只要class文件发生变化,serialVersionUID就会改变,否则一直不变
列出几种情况直观看到serialVersionUID作用,验证代码可以自己简单写下
情况一:Test类序列化后,从A端传到B端,然后在B端反序列化(或者先序列化到本地文件,再反序列化),如果类都一样,serialVersionUID不一样
结果:报错
情况二:两处serialVersionUID一致,A端增加一个字段
结果:正常序列化、反序列化。A端多的字段B端忽略
情况三:两处serialVersionUID一致,B端增加一个字段
结果:序列化、反序列化正常,B端新增字段赋予默认值
相关推荐
### Java序列化(Serializable)的作用与反序列化详解 #### 一、序列化的概念 序列化是指将程序中的对象转换为一系列字节流的过程,主要用于保存对象的状态或在网络之间传输对象。序列化的主要目的是为了能够持久化...
Java序列化还支持版本控制,即`serialVersionUID`。这个版本号用于验证序列化过程中类的兼容性。如果类在序列化后进行了修改,`serialVersionUID`应该相应更新,否则反序列化可能会失败。如果没有显式定义,Java会...
下面我们将深入探讨Java序列化的概念、作用、实现方式以及相关应用。 1. **序列化概念** - Java序列化是Java平台提供的一种持久化机制,它允许将对象转换为字节序列,这样就可以保存在文件中或在网络上传输。 - ...
### Java序列化(Serializable)的作用与反序列化详解 #### 一、序列化是什么? 序列化是指将程序中的对象转换为字节流的过程,从而方便存储或传输这些对象。通常,序列化用于将对象的状态(即其实例变量的值,而非...
Java序列化是Java平台中的一种标准机制,它允许将对象的状态转换为字节流,以便存储、传输或恢复。在Java中,一个类如果要实现序列化,需要实现`Serializable`接口,这是一个标记接口,不包含任何方法。下面我们将...
1. **序列化标识符(SerialVersionUID)**:Java允许你为每个可序列化的类定义一个唯一的`serialVersionUID`,默认是由JVM根据类的结构计算出来的。如果类的版本更新导致结构变化,而此值未做更新,反序列化时会抛出`...
在给定的链接"Java序列化机制(2)- serialVersionUID 实验"中,博主通过一个实验详细解释了`serialVersionUID`的作用和重要性。实验可能包括以下步骤: 1. 创建一个实现`Serializable`接口的简单类,并运行序列化...
**一、Java序列化** 1. **什么是序列化**:序列化是将对象的状态(属性和成员变量)转换为可以存储或传输的数据格式的过程。在Java中,通常是将对象转换为字节数组,以便写入磁盘或通过网络发送。 2. **为什么需要...
Java 序列化和 serialVersionUID 的使用方法实例 Java 序列化是指将 Java 对象转换为二进制流的过程,以便在网络中传输或持久化到数据库或文件系统中。序列化的作用是将 Java 对象的状态保存起来,以便下次使用时...
序列化ID,即`serialVersionUID`,是Java序列化机制中一个关键的概念。它是一个类的唯一标识符,用于在序列化和反序列化过程中确定类的版本一致性。如果序列化对象和反序列化对象的`serialVersionUID`不匹配,将会抛...
Java序列化是Java平台提供的一种将对象转换为字节流,以便存储、在网络上传输或者在后续时间重新创建相同对象的机制。这是Java编程中一个非常重要的概念,尤其是在分布式环境和持久化存储中。让我们深入探讨一下Java...
Java序列化面试题(10题) 在 Java 中,序列化是一种用于处理对象流的机制,它可以将对象的内容进行流化,使其可以被读写和传输。下面是 10 个与 Java 序列化相关的面试题目: 1. 什么是 Java 序列化,如何实现 ...
序列化版本号serialVersionUID的作用_动力节点Java学院整理.
Java序列化是将Java对象转换为字节流的过程,以便可以在磁盘、数据库或网络上存储或传输这些对象。这使得我们能够保存对象的状态,并在稍后的时间点恢复它,或者在网络之间传递对象。反序列化是相反的过程,即从字节...
### Java对象序列化标准知识点详解 #### 一、系统架构概览 **1.1 概览** Java 对象序列化是一种将Java对象的...以上内容涵盖了Java序列化标准的关键知识点,深入了解这些概念有助于更好地理解和应用Java序列化技术。
Java对象序列化与反序列化是Java编程中重要的概念,主要应用于数据持久化、网络传输以及存储等场景。本文将详细解析这两个概念及其在实际应用中的实现方式。 **一、Java对象序列化** 1. **定义**: Java对象序列化...
Java序列化是将对象转换为字节流的过程,目的是为了保存对象的状态以便稍后恢复或传输到其他地方。通过实现`Serializable`接口,一个Java对象就可以被序列化。这个接口是一个标记接口,没有定义任何方法,仅表示对象...
Java序列化是Java平台提供的一种将对象转换为字节流,以便存储到磁盘、数据库或网络中的机制。它是Java语言内置的一种特性,主要用于持久化数据,也可以在进程间传递对象,或者在网络上传输对象。在Java中,如果一个...
### Java序列化与反序列化的深入解析 #### Java序列化的重要性及应用场景 Java序列化是一项核心功能,它允许程序员将对象的状态转化为字节流的形式,从而实现对象的持久化存储或者在网络之间进行传递。这对于诸如...
通过实例深入了解 Java 序列化 Java 序列化是 Java 系列技术中一个较为重要的技术点,用于将 Java 对象序列化为二进制文件。开发人员只需要了解被序列化的类需要实现 Serializable 接口,使用 ObjectInputStream 和...