ObjectOutputStream/Input可在JAVA中序列化
我正在使用ObjectOutputStream/Input可在JAVA中序列化,java,serializable,Java,Serializable,我正在使用ObjectOutputStream将我的对象保存到.dat文件中。 我的问题是,如果我更改了对象的源代码(例如,我添加了一个方法(getter)),那么 输入流无法加载数据并告诉我有关可序列化的的错误: 有可能解决这个问题吗?如果我更改源代码,我必须在每次之后生成新的.dat文件 使用此方法: (不要查看对象类型返回值) 拯救 装载 错误是: Error: java.io.InvalidClassException: MapVerb.RealVerb; local class inc
ObjectOutputStream
将我的对象保存到.dat
文件中。
我的问题是,如果我更改了对象的源代码(例如,我添加了一个方法(getter)),那么
输入流无法加载数据并告诉我有关可序列化的的错误:
有可能解决这个问题吗?如果我更改源代码,我必须在每次之后生成新的.dat
文件
使用此方法:
(不要查看对象类型返回值)
拯救
装载
错误是:
Error: java.io.InvalidClassException: MapVerb.RealVerb; local class incompatible: stream classdesc serialVersionUID = -887510662644221872, local class serialVersionUID = 7992494764692933500
有可能解决这个问题吗
对。序列化中断的原因是生成的版本号更改。如果您显式地指定它,它将不会生成,并且您将控制版本控制。这意味着您需要小心——如果您更改了对象中的字段或这些字段的含义,您需要记住自己更改版本号
您可以按如下方式指定序列化版本:
// It doesn't have to be constant, but that's fairly common.
private static final long serialVersionUID = ...; // Some constant
有关更多信息,请参阅文档
您可能还想考虑使用替代的方法来存储数据——java中的默认二进制序列化相当脆弱。还有很多选择——基于文本的格式,如XML、JSON或YAML,或二进制格式,如协议缓冲区或节俭。
谢谢。。。谢谢你的回复和帮助。
Error: java.io.InvalidClassException: MapVerb.RealVerb; local class incompatible: stream classdesc serialVersionUID = -887510662644221872, local class serialVersionUID = 7992494764692933500
// It doesn't have to be constant, but that's fairly common.
private static final long serialVersionUID = ...; // Some constant