【发布时间】:2015-09-15 14:32:06
【问题描述】:
我正在探索 Java 序列化和反序列化,但想知道反序列化是如何工作的。
这是我的序列化和反序列化代码:
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
public class Testing{
public static void main(String[] args){
Serial obj = new Serial();
Serial ObjNew = null;
try{
FileOutputStream fob= new FileOutputStream("file.src");
ObjectOutputStream oob= new ObjectOutputStream(fob);
oob.writeObject(obj);
oob.close();
}catch(Exception fnf){
fnf.printStackTrace(System.out);
}
try{
FileInputStream fis = new FileInputStream("file.src");
ObjectInputStream ois = new ObjectInputStream(fis);
ObjNew=(Serial)ois.readObject();
}
catch(IOException | ClassNotFoundException fnf){
fnf.printStackTrace(System.out);
}
System.out.println("OLD: "+obj);
System.out.println("NEW: "+ObjNew);
}
}
这里是可序列化的类代码:
import java.io.Serializable;
public class Serial implements Serializable {
private final String ok="DONE";
@Override
public String toString(){
return ok;
}
}
上面的代码一切正常。 但是当我尝试使用此代码反序列化对象时。
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
public class Testing{
public static void main(String[] args){
Serial ObjNew = null;
try{
FileInputStream fis = new FileInputStream("file.src");
ObjectInputStream ois = new ObjectInputStream(fis);
ObjNew=(Serial)ois.readObject();
}
catch(IOException | ClassNotFoundException fnf){
fnf.printStackTrace(System.out);
}
System.out.println("NEW: "+ObjNew);
}
}
我只是在 Serializable 类中更改了 String ok="Do"; 的值,只是为了测试反序列化输出。
但它只是打印Do,而不是存储在文件中的值DONE。
为什么它只打印Do?
为什么它不从文件中读取值?
有什么帮助吗?
【问题讨论】:
标签: java serialization