使用ObjectOutputStream / ObjectInputStream传输自定义对象时,将重置变量

时间:2013-12-31 18:23:22

标签: java networking stream objectinputstream objectoutputstream

我创建了一个服务器 - 客户端聊天室样式应用程序,我正在尝试使用客户端/服务器应用程序传输我创建的包含消息的自定义对象和人员的用户名。为此,我创建了一个名为message的单独类,其中包含两个静态变量,一个名为username,一个名为messageText

public class message implements Serializable{

    static String username = "";
    static String messageText = "";

    public message(String message, String user){
        System.out.println("Setting username and messageText");
        username = user;
        messageText = message;
    }

    public message(Object recievedObject){
        username = ((message) recievedObject).getUsername();
        messageText = ((message) recievedObject).getMessageText();
    }
}

我将此类的对象从我的服务器发送到客户端,如下所示:

message sendMessage = new message(enteredText, "SERVER");
output.writeObject(sendMessage);

客户接受如下:

message recievedMessage = (message) input.readObject();
cw.say(recievedMessage.getMessageText(), recievedMessage.getUsername());

然而,getMessageText()getUsername()之上的两个方法都将返回接收端初始化变量的任何方法,并在发送方返回正确的值。

尝试解决这个问题的几个小时没有提供解决方案,所以你们给我的任何帮助都非常非常感谢!感谢。

2 个答案:

答案 0 :(得分:4)

静态字段未序列化。如果你使它们非静态,它应该工作

答案 1 :(得分:0)

静态变量由类的所有实例共享。这意味着序列化它们没有多大意义。

在消息中,“username”和“messageText”字段可能并不是静态的,除非只有一条消息存在。