获取ObjectInputStream以查看不同的对象

时间:2012-10-07 01:58:30

标签: java client objectinputstream

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

1 个答案:

答案 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());
}