1

我正在制作一个服务器-客户端应用程序。我的应用程序有两个部分,聊天部分和游戏部分。当我聊天时,我发送 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,但是聊天部分正在工作。

4

1 回答 1

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());
}
于 2012-10-07T02:02:02.597 回答