首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ObjectInputStream readObject():ClassNotFoundException

ObjectInputStream readObject():ClassNotFoundException
EN

Stack Overflow用户
提问于 2012-08-01 01:29:24
回答 2查看 6.4K关注 0票数 3

在客户机类和服务器类中,我都有一个完全相同的内部类,称为Data。此数据对象是使用以下命令从服务器发送的:

代码语言:javascript
复制
ObjectOutputStream output= new ObjectOutputStream(socket.getOutputStream());
output.writeObject(d);

(其中d是数据对象)

此对象在客户端接收,并转换为数据对象:

代码语言:javascript
复制
ObjectInputStream input = new ObjectInputStream(socket.getInputStream());
Object receiveObject = input.readObject();
if (receiveObject instanceof Data){
    Data receiveData = (Data) receiveObject;
    // some code here... 
}

我在这条线路上得到了一个java.lang.ClassNotFoundException: TCPServer$Data Object receiveObject = input.readObject();

我的猜测是,它试图在服务器端查找数据类,但找不到,但我不确定……我该如何解决这个问题?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-08-01 01:59:47

您尝试做的事情是类似于以下内容的:

代码语言:javascript
复制
class TCPServer {
    /* some code */

    class Data {

    }
}

class TCPClient {
    /* some code */

    class Data {

    }
}

然后将TCPServer$Data序列化,并尝试将其反序列化为TCPClient$Data。相反,你会想要这样做:

代码语言:javascript
复制
class TCPServer {
    /* some code */

}

class TCPClient {
    /* some code */

}

class Data {
    /* some code */

}

然后确保数据类对客户端和服务器程序都可用。

票数 8
EN

Stack Overflow用户

发布于 2012-08-01 01:49:54

当您在两个不同的JVM中使用某个类,并且您正在编组/解组该类时,应该将该类导出到一个公共库中,并在服务器和客户端之间进行共享。有不同的类在任何时候都不会起作用。

您要做的是将TCPServer$Data编组并解组为TCPClient$Data。这是不兼容的。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11745771

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档