通过添加静态方法改变可序列化类,java
在向类添加静态方法后,我的可序列化类没有被objectinputstream读入,这是预期的行为吗?在javadoc中,它在何处声明向可序列化类添加静态方法会导致不兼容?在Java对象序列化规范中,部分: 流唯一标识符是类名、接口类名、方法和字段的64位哈希 对于按方法名称和签名排序的每个非私有方法:通过添加静态方法改变可序列化类,java,java,serializable,Java,Serializable,在向类添加静态方法后,我的可序列化类没有被objectinputstream读入,这是预期的行为吗?在javadoc中,它在何处声明向可序列化类添加静态方法会导致不兼容?在Java对象序列化规范中,部分: 流唯一标识符是类名、接口类名、方法和字段的64位哈希 对于按方法名称和签名排序的每个非私有方法: 方法的名称 方法的修饰符写为32位整数 方法的描述符 不,我也不知道它实际上如何破坏序列化状态的兼容性,但这就是为什么它要么值得避免默认的Java二进制序列化(例如for),要么总是自己声明
- 方法的名称
- 方法的修饰符写为32位整数
- 方法的描述符
不,我也不知道它实际上如何破坏序列化状态的兼容性,但这就是为什么它要么值得避免默认的Java二进制序列化(例如for),要么总是自己声明一个
serialVersionUid
。在Java对象序列化规范中,第节:
流唯一标识符是类名、接口类名、方法和字段的64位哈希
对于按方法名称和签名排序的每个非私有方法:
- 方法的名称
- 方法的修饰符写为32位整数
- 方法的描述符
不,我也不知道它实际上是如何破坏序列化状态的兼容性的,但这就是为什么它或者值得避免默认的Java二进制序列化(例如for),或者总是自己声明一个
serialVersionUid
。如果没有更多信息,就不可能真正诊断您的问题。请发布一些代码,并详细描述一下这个问题。线程“main”java.io.InvalidClassException中的异常:本地类不兼容:stream classdesc serialVersionUID=2421933566308851961,本地类serialVersionUID=6969314805631849195,我所做的只是添加静态方法,添加旧的serialVersionUID修复了这个问题谢谢。这当然意味着Jon Skeet解决了你的问题,这并不奇怪。如果没有更多信息,就不可能真正诊断你的问题。请发布一些代码,并详细描述一下这个问题。线程“main”java.io.InvalidClassException中的异常:本地类不兼容:stream classdesc serialVersionUID=2421933566308851961,本地类serialVersionUID=6969314805631849195,我所做的只是添加静态方法,添加旧的serialVersionUID修复了这个问题谢谢。这当然意味着Jon Skeet解决了你的问题,这一点也不奇怪。