Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ObjectOutputStream/Input可在JAVA中序列化_Java_Serializable - Fatal编程技术网

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