线程“主”中的异常java.lang.ClassCastException

时间:2018-07-18 13:07:19

标签: java

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);

    }
}

2 个答案:

答案 0 :(得分:2)

您序列化String

rak r = new rak();
...
oos.writeObject("value of  i is" + r.i);

然后将反序列化结果转换为rak对象:

r1 = (rak) f9.readObject();

ClassCastExceptionString不是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