import java.io.*;
class rak implements Serializable{
int i;
}
public class Main {
public static void main(String[] args) throws Exception {
// write your code herer
rak r = new rak();
r.i = 9;
File f = new File("da.txt");
FileOutputStream f1 = new FileOutputStream(f);
ObjectOutputStream oos = new ObjectOutputStream(f1);
oos.writeObject("value of i is" + r.i);
FileInputStream f0 = new FileInputStream(f);
ObjectInputStream f9 = new ObjectInputStream(f0);
rak r1 = new rak();
r1 = (rak) f9.readObject();
System.out.println(r1.i);
}
}
答案 0 :(得分:2)
您序列化String
:
rak r = new rak();
...
oos.writeObject("value of i is" + r.i);
然后将反序列化结果转换为rak
对象:
r1 = (rak) f9.readObject();
而ClassCastException
:String
不是rak
。
如果您要反序列化rak
,请对其进行序列化,而不仅要序列化它,例如:
oos.writeObject(r);
答案 1 :(得分:0)
在这一行:
oos.writeObject("value of i is" + r.i);
您直接按字串化了字符串"value of i is9"
而不是对象本身。因此,唯一可能的转换是再次对String进行操作。
String string = (String) f9.readObject();
要解决此问题,请序列化整个对象:
rak r = new rak();
r.i = 9;
// ...
oos.writeObject(r);
最后一行的结果是正确的:
// ...
rak r1 = (rak) f9.readObject();
System.out.println(r1.i); // prints 9