`
bluetaoren
  • 浏览: 74591 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

serialVersionUID不一致导致控制台出现异常:java.io.InvalidClassException

    博客分类:
  • java
 
阅读更多
2013-07-01 17:13:15.101 WARN net.spy.memcached.transcoders.SerializingTranscoder:  Caught IOException decoding 848 bytes of data
java.io.InvalidClassException: com.*.article.qa.entity.Qa_question; 
  local class incompatible: stream classdesc serialVersionUID = 5590259895198052390, local class serialVersionUID = 7673969121092229700
	at java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:562)
	at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1582)
	at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1495)
	at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1731)
	at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1328)
	at java.io.ObjectInputStream.readObject(ObjectInputStream.java:350)
	at net.spy.memcached.transcoders.BaseSerializingTranscoder.deserialize(BaseSerializingTranscoder.java:129)
	at net.spy.memcached.transcoders.SerializingTranscoder.decode(SerializingTranscoder.java:88)
	at net.spy.memcached.transcoders.TranscodeService$1.call(TranscodeService.java:63)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at net.spy.memcached.transcoders.TranscodeService$Task.run(TranscodeService.java:110)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:662)

 访问一些链接,访问数据库,底层就抛出这个错误。并非都出现,而是几率性出现。

目前并没有发现不一致的地方。有可能是底层缓存net.spy.memcached里的代码影响。原因是:我本地的实体增加了三个字段,但是缓存里并没有改变影响,进一步追踪中......

根据网上说明:

异常原因

本地和远程的entity序列化后的serialVersionUID不一致导致

解决方法

将本地的序列化的类中的版本号(serialVersionUID )改成和远程中一样,在本地的序列化类里的private static final long serialVersionUID = 改成远程的就行了,如果没有的话就加上这句。
 
解决办法:
在dao.propertities里面添加:memcache.key.version.Qa_question=1.0.1
为什么添加这行,说明如下:

Dao配置文件 dao.properties,由系统启动加载,系统变量"-Ddao.config.file=文件的绝对路径"

#entity默认的key版本
memcache.key.version.default=1.0.0
#如果一个entity版本变更,需要在配置文件中定义一个key,无须重启,自动生效
#格式:memcache.key.version.{entity的class名字}=版本号
memcache.key.version.User=1.0.1

#memcache client factory class name
#如果开启cache,打开下行注释,不启动cache,注释下行
memcache.client.factory=MemcachedClientSpyFactory

# Spy Params Config
spy.memcached.servers=host1:11211,host2:11311
# Set the default expire time in seconds
spy.memcached.defaultExpire=86400
spy.memcached.compressionThreshold=16384
# Set the default operation timeout in milliseconds.
spy.memcached.opTimeout=1000

 

分享到:
评论

相关推荐

    java.io.InvalidClassException local class incompatible 处理方法

    当这个对象被反序列化时,序列化运行时会计算出该类当前的`serialVersionUID`并与序列化文件中的值进行比较,如果不一致,则会抛出`java.io.InvalidClassException`异常。 #### 为什么需要显式声明serialVersionUID...

    java.io.Serializable序列化问题

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

    chatRoom 聊天室

    import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintStream; import java.net.ServerSocket; import java.net.Socket; import java.text....

    java类中serialVersionUID详解.pdf

    当实现 `java.io.Serializable` 接口的类未明确声明 `serialVersionUID` 时,Java 序列化机制将根据编译后的 Class 文件自动生成一个 `serialVersionUID`。此规则下,即使多次重新编译,只要 Class 文件内容不变...

    一个简单的一对一 聊天系统

    import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.Socket; import javax....

    JAVA常见异常...........

    4. **InvalidClassException**:无效的类异常,通常在反序列化时出现,因为类的版本与序列化时的版本不符。为解决此问题,可以在类上定义一个常量`serialVersionUID`以固定版本号,使序列化和反序列化兼容。 ```...

    java控制台实现课程表

    Java 控制台实现课程表是一个基础的编程项目,它涵盖了数据结构、IO 流和对象序列化的知识。在这个项目中,我们将使用 Java 语言在控制台上创建一个简单的课程表系统,用户可以通过输入命令来实现对课程表的增、删、...

    构造java探测class反序列化gadget1

    关键代码位于`java.io.ObjectStreamClass#initNonProxy`方法中,该方法会比较类的serialVersionUID以判断是否匹配。 为了绕过这个检查,我们可以尝试破坏以下三个条件之一: 1. 本地和远程类是否都实现了...

    序列和反序列案例

    如果不定义,Java会自动生成一个,但可能会在升级类结构时导致问题。 3. **序列化对象**:使用`ObjectOutputStream`的`writeObject()`方法将对象写入输出流。 4. **反序列化对象**:使用`ObjectInputStream`的`...

    coreJava: serialVersionUID

    当Java在反序列化时检测到目标类的`serialVersionUID`与原始序列化数据中的`serialVersionUID`不匹配时,会抛出`InvalidClassException`,提示类的序列化版本不一致。默认情况下,JVM会根据类的字段和方法自动生成一...

    614.612.JAVA基础教程_IO流与网络编程-serialVersionUID的理解(614).rar

    当反序列化时,如果发现接收到的`serialVersionUID`与当前类的不匹配,就会抛出`InvalidClassException`,提示序列化版本不兼容。 为了确保序列化兼容性,开发者可以在类中显式声明`serialVersionUID`,并赋予一个...

    Weblogic9异常解决nested errors.txt

    不一致的版本可能导致`serialVersionUID`的差异,从而引发异常。 2. **重新编译和打包**:如果项目中包含了自定义的类,并且这些类的结构发生过更改,那么需要重新编译并确保在打包时使用了最新的类版本。 3. **...

    java对象序列化和反序列化

    - 版本兼容性:如果序列化时的类结构与反序列化时的类结构不一致,可能会导致异常。应确保序列化和反序列化发生在相同版本的类定义下。 **三、自定义序列化与反序列化** 1. **序列化回调**:可以重写`writeObject...

    Java 多次序列化对象到同壹個文件及反序列化的问题

    如果在序列化后修改了类的结构(如添加、删除或修改字段),`serialVersionUID`会改变,导致反序列化时抛出`InvalidClassException`。 多次序列化同一对象到同一个文件,每次都会覆盖之前的序列化数据。如果对象...

    Struts Updownload 源码

    import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.UnsupportedEncodingException; ...

    java序列化与反序列化

    如果类在序列化后进行了修改,可能导致反序列化失败,除非手动指定`serialVersionUID`以保持一致性。 - ** transient 关键字**: 用于标记不希望序列化的字段。 - **Externalizable 接口**: 除了Serializable接口外,...

    java序列化对象的存储和读取共6页.pdf.zip

    为了应对这个问题,可以使用`serialVersionUID`字段,这个字段表示类的序列化版本标识,当类发生改变时,需要更新这个值以避免版本不匹配的异常。 - **安全性问题**:序列化可以被恶意利用,因为反序列化过程中可能...

    java序列化和serialVersionUID的使用方法实例

    当类中的字段或方法名改变时,如果不设置 serialVersionUID 值,可能会抛出异常。serialVersionUID 值是根据类名、接口名、成员方法及属性等来生成一个 64 位的哈希字段。显示设置 serialVersionUID 值可以保证版本...

    java自动序列化

    如果手动指定,应保持在序列化和反序列化时一致,否则可能导致`InvalidClassException`。 七、序列化工具 1. `java.io.ObjectOutputStream`和`java.io.ObjectInputStream`:基础的序列化和反序列化工具类。 2. `...

    JAVA导出excel文件2003版,结合具体框架的实现

    ### JAVA导出Excel文件2003版:结合具体框架的实现 #### 一、概述 在企业级应用开发中,导出数据到Excel是一种常见的需求。本文将介绍如何使用Java来导出Excel 2003版本(.xls)文件,并结合具体的框架实现这一功能...

Global site tag (gtag.js) - Google Analytics