ObjectInputStream.readObject()中的ClassNotFoundException

时间:2012-05-02 22:14:34

标签: java serialization classnotfoundexception objectinputstream

我试图将客户端应用程序传递的对象转换为服务器应用程序中相同类的对象。

我目前在服务器应用程序中收到的错误是:

mei 02, 2012 11:44:43 PM server.UserThread process
SEVERE: null
java.lang.ClassNotFoundException: client.User

服务器通过Socket接收对象 - > ObjectInputStream的。

所以我想知道你们是否可以帮助我将client.User类强制转换为我的Server.User类。唯一有效的方法是将包放在1个项目中,然后定义类的确切位置。

始终可以提供代码。

2 个答案:

答案 0 :(得分:2)

  

将client.User类强制转换为我的Server.User类

你做不到。他们不是同一个班级。它们有不同的包装。它们是不同的。如果要在服务器和客户端之间共享类,则必须共享单个.class文件。这可能意味着为共享内容创建第三个包。

答案 1 :(得分:0)

这些类需要相同,因为有些用户建议回复您的问题。使用默认序列化过程来展平和膨胀对象似乎不是一个好选择。 如果使用Externalizable接口而不是Serializable,则可以定义自己的协议, 您可以使用writeExternal和readExternal来自定义序列化过程。

如果您尝试将对象从服务器发送到客户端,我实际上不鼓励使用对象流。我可以建议Protobuff这样做吗?

  

Protobuff:

     

协议缓冲区是一种以高效且可扩展的格式编码结构化数据的方法。 Google对几乎所有内部​​RPC协议和文件格式都使用Protocol Buffers。