`

Java序列化中版本控制

阅读更多
    在Java序列化和反序列化的过程中,版本控制是通过serialVersionUID属性实现的,一般被定义为private static final long 型。
private static final long serialVersionUID = 3257568403819476528L;

    在进行对象的序列化时读取该属性保存到二进制文件当中,反序列化时取得该对象的serialVersionUID属性之后,与当前JVM中保存的Class中的该属性进行一致性判定,如果不一致,则说明Class属性被更改过(当然,在更改类--如添加删除某个属性时,同时需要重新生成该属性的具体值,以保证每一次更改的版本与serialVersionUID的对应)。
    在Eclipse当中,如果一个类实现了Serializable接口,却不定义该属性,会出现警告,通过eclipse或者serialver命令都可以生成该属性的64bit的long型值(通过SHA-1的hash加密算法生成)。
    之后,反序列化之前首先验证JVM当中serialVersionUID与二进制流中读取到的serialVersionUID值是否一致,如果不一致,则会抛出java.io.NotSerializableException异常,便不会继续反序列化。
分享到:
评论

相关推荐

    java序列化和反序列化的方法

    Java 序列化和反序列化是 Java 语言中的一种机制,用于将对象转换为字节流,以便在网络上传输或存储。序列化是将对象转换为字节流的过程,而反序列化是将字节流转换回对象的过程。 在 Java 中,序列化和反序列化是...

    Java序列化_Java序列化结构_

    Java序列化还支持版本控制,即`serialVersionUID`。这个版本号用于验证序列化过程中类的兼容性。如果类在序列化后进行了修改,`serialVersionUID`应该相应更新,否则反序列化可能会失败。如果没有显式定义,Java会...

    Java序列化

    Java序列化是Java平台中的一种标准机制,允许将对象的状态转换为字节流,以便存储在磁盘上、通过网络进行传输或者在某些时候恢复原来的对象状态。这一过程包括两个主要步骤:对象的序列化(将对象转换为字节流)和反...

    java 序列化代码示例

    Java序列化是Java平台中的一种标准机制,它允许将对象的状态转换为字节流,以便存储、传输或恢复。在Java中,一个类如果要实现序列化,需要实现`Serializable`接口,这是一个标记接口,不包含任何方法。下面我们将...

    java序列化实现演示

    Java序列化是Java平台中的一种标准机制,允许对象的状态被保存到磁盘或者在网络中进行传输,以便在后续的时间或地点恢复这些对象。这个过程包括两个主要操作:序列化(将对象转换为字节流)和反序列化(将字节流恢复...

    C#和Java的序列化反序列化

    而在Java中,我们可以通过实现`Serializable`接口来使类支持序列化,或者使用`java.io.ObjectOutputStream`和`java.io.ObjectInputStream`进行对象的序列化和反序列化。 接下来,我们讨论反序列化。反序列化是序列...

    Java对象序列化标准最新版

    ### Java对象序列化标准知识点详解 #### 一、系统架构概览 **1.1 概览** Java 对象序列化是一种将Java对象的...以上内容涵盖了Java序列化标准的关键知识点,深入了解这些概念有助于更好地理解和应用Java序列化技术。

    FST:快速Java序列化的替代品

    **FST:快速Java序列化的替代方案** 在Java开发中,序列化是一个常见的需求,它允许将对象的状态转换为字节流,以便于存储或网络传输。标准的Java序列化虽然方便,但在处理大量数据时,性能往往成为瓶颈。这时,FST...

    Java实现序列化例子

    Java序列化是Java平台提供的一种将对象转换为字节流,以便存储到磁盘、数据库或网络中的机制。它是Java语言内置的一种特性,主要用于持久化数据,也可以在进程间传递对象,或者在网络上传输对象。在Java中,如果一个...

    java自动序列化

    Java序列化是将对象转换为字节流的过程,目的是为了保存对象的状态以便稍后恢复或传输到其他地方。通过实现`Serializable`接口,一个Java对象就可以被序列化。这个接口是一个标记接口,没有定义任何方法,仅表示对象...

    java 序列化 将实体类本地序列化

    Java序列化是Java平台中的一种标准机制,允许将对象的状态转换为字节流,以便可以存储这个状态(例如,到磁盘或通过网络传输),之后再恢复为原来的对象。这在许多场景下都非常有用,例如持久化数据、跨网络传输对象...

    java反序列化利用程序UI版Beta1.1.rar

    1. **Java序列化机制**:Java对象序列化是通过实现`Serializable`接口来标记一个类可被序列化。`ObjectOutputStream`用于将对象写入流,`ObjectInputStream`用于从流中读取并反序列化对象。 2. **易受攻击的库**:...

    java对象序列化.ppt

    Java对象序列化是一种将对象转换为字节流的过程,以便可以将其存储在磁盘上,或者在网络中进行传输。这是Java平台提供的一种功能,允许程序员将任何Java对象持久化,即将其状态保存到磁盘,或者在网络中进行传输。...

    java 序列化

    Java序列化还涉及到版本控制问题,即`serialVersionUID`。每个可序列化的类都有一个与此类相关的唯一标识符,用于版本控制。当类的结构发生改变时,如果未显式声明`serialVersionUID`,Java会自动生成,如果类结构...

    Java对象序列化的秘密

    在Java中,实现对象序列化主要依靠实现`java.io.Serializable`接口。本文将深入探讨Java对象序列化的原理、用途和注意事项。 **一、序列化原理** 1. **实现Serializable接口**: 对象要能够被序列化,它所在的类...

    Java反序列化安全漏洞防控

    由于Java在反序列化对象时并没有对对象的类型进行严格的检查和限制,这使得攻击者有机会通过精心设计的输入数据,控制反序列化过程中创建的对象类型,从而引发未授权的代码执行。 这样的漏洞往往被用于攻击常见的...

    Java中Tree的序列化

    在Java编程中,序列化是将对象的状态转换为字节流的过程,以便可以在需要时恢复这些状态。这对于存储对象或在网络上传输对象非常有用。当我们谈论"Java中Tree的序列化"时,我们通常指的是如何将树形数据结构(如`...

    如何正确的使用Java序列化技术

    此外,还将深入讨论如何精准控制序列化机制,帮助读者在实际编程中正确运用Java序列化技术,避免常见误区,并掌握高效利用该技术的方法。 **关键词:** 序列化(Serialize)、反序列化(DeSerialize)、类加载...

    java 对象序列化

    2. **版本控制**:如果你的类在不同时间被序列化和反序列化,可能需要处理版本兼容性问题。可以使用`serialVersionUID`字段来解决这个问题。 3. **性能**:虽然序列化方便,但不是所有对象都适合序列化,特别是大型...

Global site tag (gtag.js) - Google Analytics