[英]ClassNotFoundException in ObjectInputStream.readObject()
[英]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.