我想将类功能移到父类,但这将抑制反序列化。起点是:
package xso.test.serializable;
import java.io.FileOutputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
public class WriteClass
{
public static void main( String[] args ) throws Exception
{
MyClass d = new MyClass();
d.i = 888;
try (ObjectOutputStream oos = new ObjectOutputStream( new FileOutputStream( "MyClass.ser" ) ))
{
System.out.println( "Serializing" );
oos.writeObject( d );
}
}
}
class MyClass implements Serializable
{
/**
* same serialVersionID as in ReadClassNew
*/
private static final long serialVersionUID = -4436695035358861227L;
int i = 10;
}我想将MyClass提取到新的SuperClass (MyNewParentClass)中,如下所示:
package xso.test.serializable;
import java.io.FileInputStream;
import java.io.ObjectInputStream;
import java.io.Serializable;
public class ReadClassNew
{
public static void main( String[] args ) throws Exception
{
ObjectInputStream ois = new ObjectInputStream( new FileInputStream( "MyClass.ser" ) );
System.out.println( "Deserializing" );
MyClass clazz = (MyClass)ois.readObject();
System.out.println( clazz.i );
}
}
class MyNewParentClass implements Serializable
{
/**
*
*/
private static final long serialVersionUID = -6437613570659781444L;
int i = 10;
}
class MyClass extends MyNewParentClass
{
/**
* same serialVersionID as in WriteClass
*/
private static final long serialVersionUID = -4436695035358861227L;
//int i = 10; // moved to parent class. (Field will not serialized any more sadly )
}看到并再现这个问题:
如果取消子类( int i = 10; )中的注释,则可以看到反序列化可以工作。但是我想反序列化超类中的字段int i。
这个是可能的吗?谢谢你的建议。
发布于 2018-03-22 16:36:00
我想在EJP的评论中添加一些内容。
当一个对象被序列化时,它的整个对象图被序列化。这意味着序列化对象的实例变量引用的任何对象都是序列化的,而那些objects...and引用的任何对象都是序列化的。在您的示例中,来自第一个代码片段的class MyClass不了解class MyNewParentClass及其变量,因此这两个基本上指向堆上不同的内存字节。
https://stackoverflow.com/questions/49432857
复制相似问题