"Checker"がクラスである "mas.back.task.Checker"と "mas.front.task.Checker"という2つの異なるパッケージがあります。 bytebufferのシリアル化を使用してクライアントソケットからサーバーソケットまで、「mas.front.task.Checker」から「mas.back.task.Checker」に変換すると正常にシリアル化されますが、動作せず、エラーメッセージがここに表示されます:Javaオブジェクトを別のパッケージソースからキャストすることはできません
Exception in thread "pool-1-thread-2" java.lang.ClassCastException: mas.front.task.Checker cannot be cast to mas.back.task.Checker
ここでは、サーバソケットにクライアントソケットを経由してクラスを送るコード:
public static final Object convertByteToObject(byte[] bytes) {
ObjectInput in;
try {
ByteArrayInputStream bis = new ByteArrayInputStream(bytes);
in = new ObjectInputStream(bis);
return in.readObject();
} catch (IOException | ClassNotFoundException ex) {
Logger.getLogger(Converter.class.getName()).log(Level.SEVERE, null, ex);
return null;
}
}
public static final byte[] convertObjectToByte(Object object) {
try {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutput out = new ObjectOutputStream(bos);
out.writeObject(object);
return bos.toByteArray();
} catch (IOException ex) {
Logger.getLogger(Converter.class.getName()).log(Level.SEVERE, null, ex);
return null;
}
}
Checkerクラスのすべてのフィールドが同じであることを確認しましたが、 "Checker checker = new Checker()"を試みましたが、 "checker =(Checker)オブジェクト"の場合、これは問題ですか?
備考:
public class Checker implements Serializable {
public String JobID;
public String JobUserID;
public int JobInterval;
public String JobStatus;
}
理由は、クラスをTCP/IPソケット経由でシリアライズまたはデシリアライズすることです。フロントエンドクライアントはmas.front.task.XXXで、バックエンドはクラスのmas.back.task.XXXです。上記の提案はありますか? –
2番目の理由はチェッカーのタイプだけでなく、他のタイプのチェッカーを送る必要があることです。 –
Checkerクラスを作成しましたか? –