【发布时间】:2017-01-31 12:25:32
【问题描述】:
我正在尝试测试自定义序列化,但没有调用 readObject() 方法。尽管我能够调用 writeObject 方法。
我们可以重载readObject方法()吗?
public class Test {
String pwd1 ;
public static void main(String arg[]) throws IOException, ClassNotFoundException{
FileInputStream fis = new FileInputStream("//vhub.lmera.ericsson.se//home//xsinkus//WDP//Desktop2k8R2//COMP_DOCS//Test//kusha1.ser");
@SuppressWarnings("resource")
ObjectInputStream ois = new ObjectInputStream(fis);
System.out.println("I am being called ");
SerilizationTest si = (SerilizationTest)ois.readObject();
System.out.println("After called ");
System.out.println(si.name);
System.out.println(si.pwd);
//si.readObject();
}
private void readObject(ObjectInputStream ois)
throws IOException, ClassNotFoundException {
ois.defaultReadObject();
pwd1 = (String) ois.readObject();
System.out.println("I am in ");
}
}
【问题讨论】:
-
您注意到您在
ObjectInputStream的实例上调用readObject(),而不是在Test的实例上? -
看起来您实际上并没有调用该方法。而且你没有重载任何东西,你只是创建了一个同名的方法。
-
@SteveSmith 这个评论是完全错误的——当然不是!它不能重载,因为它是私有的 - it is still used(如果对象是
Serializable。) -
@1blustone 你是对的。另一个问题是这些对象是如何写入的,即文件是否实际包含所需格式的数据。
-
另一个问题:你为什么要打电话给
defaultReadObject()和readObject()?根据 JavaDocdefaultReadObject()确实“从该流中读取当前类的非静态和非瞬态字段”,即它应该读取pwd1,因此readObject()应该会遇到问题。你有什么例外吗?
标签: java