我正在制作服务器客户端应用程序。我的应用程序有两个部分:聊天部分和游戏部分。 当我进行聊天时,我发送了String对象,当我玩游戏时,它会将Game对象发送到另一台计算机。 我怎么能让我的ObjectInputStream看到两种对象之间的区别。 我一直在尝试这样的事情:
if (input.readObject().getClass().isAssignableFrom(Game.class)){
game1 = (Game) input.readObject();
output.writeObject(game1);
output.flush();
}else{
message = (String) input.readObject();
output.writeObject(message);
output.flush();
}
当我想使用游戏对象时,它会抛出NotSerializableException,但是chatpart正在运行。
答案 0 :(得分:2)
您的Game
对象是否实施Serializable
?如果您希望能够使用ObjectInputStream
/ ObjectOutputStream
进行读/写,则必须这样做。
此外,除了使Game
可序列化之外,同样适用于Game
类中声明的每个字段。每个人都必须实施Serializable
或声明为transient
(或static
)成员。如果不满足这些条件,当您尝试编写对象时,将获得NotSerializableException
。
修改强>
您的代码中还存在其他一些问题。首先,你打电话readObject()
太多次了。我建议尝试类似的事情:
Object next = input.readObject();
if (next instanceof Game) {
game1 = (Game)next;
//...
}
else if (next instanceof String) {
message = (String)next;
//...
}
else {
System.out.println("Unexpected object type: " + next.getClass().getName());
}