我正在研究一个类来简化套接字的处理。我有一个InputStream,它包含收到的消息,我想将它转换为用户在声明我的类时定义的另一个类。这就是代码
private T read() throws IOException, ClassNotFoundException{
ObjectInput ois = new ObjectInputStream (reader);
T message = (T) ois.readObject();
return message;
}
但它抛出异常:ClassNotFoundException 我知道为什么。当T是String类型时它运行良好但是当它是自定义类时它不会。
所以我在这里问:p 提前谢谢
答案 0 :(得分:1)
请仔细检查序列化对象中定义的所有类型是否也在类型T
中定义。
我认为@fabian是正确的。
答案 1 :(得分:0)
您可以尝试将邮件设为Object
吗?
ObjectInput ois = new ObjectInputStream (my_input_stream);
Object message = (Object) ois.readObject();
或尝试在方法声明中添加<T>
:
private <T> T read() throws IOException, ClassNotFoundException{
ObjectInput ois = new ObjectInputStream (reader);
T message = (T) ois.readObject();
return message;
}
答案 2 :(得分:0)
这似乎不是演员表的问题,而是从Object
阅读ObjectInputStream
。以下是ObjectInputStream.readObject
的ClassNotFoundException
的说明:
无法找到序列化对象的类。
这意味着您忘记将InputStream
中的某些类别的数据添加到类路径中。