`

Serializable UID一致性问题

    博客分类:
  • java
 
阅读更多

应该都在知道,当我们要将java对象存在在本地,或者从本地读取到内存中该对象的类必须实现serializable接口,其实该接口中没有任何方法的声明看,只是作为一个可被jvm特殊处理的标志,每一个实现该接口的类都有一个UID(stream unique identifier )作为该类的唯一标志,这个UID是通过类名、方法名等诸多因素计算出来的,它和该类是一一对应的关系。如若UID不对应那么就无法实现反序列化了。会出现如下异常

java.io.InvalidClassException: com.java.model.User; local class incompatible: stream classdesc 
serialVersionUID = -405990810656876143, local class serialVersionUID = 875403040358241326

 

由上面可知,当我向本地序列化对象之后,尽量不要 已经被序列化的类中添加或者删除相关字段或者方法 ,如若必须要改动则需重新进行序列化操作。

 

另一种情况容易出现UID不一致的情况就是在做分布式的时候,由于UID在没有指定的时候是jvm根据类的相关属性自动生成的,所以选择相同的jvm是前提,所以在做分布式的时候尽量要选取相同的jvm

分享到:
评论

相关推荐

    java.io.Serializable序列化问题

    ### Java.io.Serializable 序列化问题详解 #### 一、序列化的概念与作用 在 Java 编程语言中,序列化是一种将对象的状态(即成员变量的值)转换为可以存储或传输的形式的过程。通常,这种形式是字节流,但也可以是...

    Oracle并行性完整性一致性总结报告

    ### Oracle并行性完整性一致性总结报告 #### 一、完整性 **1.1 完整性概念** 数据完整性是指确保数据库中的数据准确无误、符合实际业务需求的状态。它是数据库管理系统(DBMS)的一个核心功能,旨在防止不符合业务...

    Intent传递对象Serializable

    1. 实现Serializable虽然方便,但序列化和反序列化过程会消耗一定的性能和内存,特别是对于大型对象,可能会导致内存溢出问题。 2. 序列化后的对象会保存一些元数据,如类名和字段名,如果类结构改变,可能导致反...

    轉Serializable至Stream

    在Java编程中,`Serializable`接口是用于对象序列化的重要工具。对象序列化是指将一个对象的状态转换为字节流的过程,以便存储或通过网络进行传输。另一方面,`Stream`通常指的是I/O流,它是Java处理输入/输出数据的...

    数据库内核_TDSQL--多级一致性--.zip

    5. **可序列化(Serializable)一致性**:这是最高的事务隔离级别,它保证所有的事务执行顺序看起来就像是在一个单线程中按顺序执行的。TDSQL可能利用分布式事务和冲突检测来实现这一目标。 6. **一致性哈希**:...

    Serializable的增删改查

    Serializable的增删改查操作,已经经过验证,可以直接运行。

    Laravel开发-serializable-values

    总之,Laravel的"serializable-values"是一个强大的工具,它允许开发者更好地控制数据的序列化和反序列化,提高应用的安全性和性能。通过集成Luminark的"serializable-values"包,你可以进一步定制这个过程,以适应...

    序列化 serializable demo

    另外,序列化还涉及到版本控制问题,如果类的结构(如字段、方法等)发生变化,可以使用`serialVersionUID`来指定序列化版本。默认情况下,JVM会根据类的结构自动生成一个版本号,但如果手动定义`serialVersionUID`...

    java->serializable深入了解

    java->serializable深入了解 java->serializable深入了解 java->serializable深入了解

    Serializable java序列号

    总之,Java序列化是Java开发中的一个重要概念,它提供了对象状态的持久化和网络传输的能力,但也需要注意其潜在的安全问题和版本兼容性挑战。理解并熟练运用序列化技术,能帮助我们更好地设计和实现复杂的Java应用...

    Serializable在C#中的作用.NET 中的对象序列化

    ### C#中Serializable的作用与对象序列化详解 #### 一、引言 在现代软件开发中,特别是基于.NET框架的应用程序开发中,对象序列化是一项非常重要的技术。它允许将对象的状态转换为一种持久的形式(如文件或网络传输...

    可序列化接口Serializable

    在Java编程语言中,`...理解并熟练掌握序列化机制,可以帮助开发者在实际项目中解决各种问题,提升代码的可维护性和安全性。通过阅读《Java_序列化的高级认识.doc》文档,你可以获得更深入的见解和实践经验。

    数据库内核_TDSQL--多级一致性--.pdf

    这个例子展示了分布式一致性的一个重要概念——可串行化(Serializable)。在可串行化隔离级别下,虽然事务并发执行,但其结果必须等同于某个事务顺序执行的结果。PostgreSQL通过一种称为Snapshot Isolation(SSI)...

    oracle和sql server两个数据库并发行和读一致性比较.pdf

    在读一致性方面,两者都提供了多个事务隔离级别,但Oracle的默认设置可能在某些情况下提供更好的数据一致性,因为它的MVCC机制可以避免某些类型的读不一致性问题。 ### 应用层面的解决办法 在应用层面,开发人员...

    Android序列化——Serializable与Parcelable

    在Android开发中,数据...在大多数情况下,Parcelable的性能优势使其成为首选,但在实现简单性和跨平台兼容性方面,Serializable更有优势。在实际开发中,根据项目的需求进行合理选择,可以提高应用的效率和用户体验。

    bundle传递基本数据,Parcelable类型数据,Serializable类型数据

    本篇将详细介绍如何通过`Bundle` 传递基本数据类型、Parcelable类型数据以及Serializable类型数据。 ### 一、基本数据类型的传递 在Android中,基本数据类型包括int、boolean、float、double、char等。通过`put()`...

    Java_Serializable(序列化)的理解和总结

    ### Java Serializable(序列化)的理解和总结 #### 一、序列化的定义与目的 序列化是一种将对象的状态转换为可以存储或传输的形式的过程。在Java中,如果一个类实现了`Serializable`接口,那么该类的对象就可以被...

    实时数据的一致性保障技术.pptx

    4. **串行化(Serializable)**:最严格的隔离级别,事务严格按照顺序执行,可以避免所有数据不一致性问题,但可能导致性能瓶颈。 #### 二、分布式事务保障机制 **分布式事务**涉及跨多个节点的数据操作,为了保证...

    java对象序列化Demo------------Serializable

    java 序列化 对象 Serializable 写着玩的Demo 简单 实用

Global site tag (gtag.js) - Google Analytics