簡體   English   中英

ObjectInputStream readObject():ClassNotFoundException

[英]ObjectInputStream readObject(): ClassNotFoundException

在客戶端和服務器類中,我都有一個完全相同的內部類,稱為Data。 正在使用以下命令從服務器發送此Data對象:

ObjectOutputStream output= new ObjectOutputStream(socket.getOutputStream());
output.writeObject(d);

(其中d是數據對象)

該對象在客戶端接收,並轉換為Data對象:

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

我的猜測是,它正在嘗試在服務器端查找Data類,但找不到它,但是我不確定...如何解決此問題?

您嘗試執行的操作類似於以下內容:

class TCPServer {
    /* some code */

    class Data {

    }
}

class TCPClient {
    /* some code */

    class Data {

    }
}

然后,您要序列化TCPServer $ Data並嘗試將其反序列化為TCPClient $ Data。 相反,您將要這樣做:

class TCPServer {
    /* some code */

}

class TCPClient {
    /* some code */

}

class Data {
    /* some code */

}

然后,確保數據類對客戶端程序和服務器程序均可用。

當您在兩個不同的JVM中使用某個類並且正在編組/解組該類時,則應將該類導出到一個公共庫,並在服務器和客戶端之間共享。 有不同的班級將無法正常工作。

您想做的是將TCPServer $ Data封送,將TCPClient $ Data取消封送。 那是不兼容的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM