Java中的ObjectOutputStream

时间:2012-11-01 16:23:58

标签: java objectinputstream

我有一个功能

public void loadUserOnline() {
        try {
            oos.writeObject(req); //Send request to Server to get online users
            oos.flush();
            LinkedList<UserOnlineInfo> userOnlineInfoList = (LinkedList<UserOnlineInfo>)ois.readObject(); // read object from Server contains online users
            Vector<String> listData = new Vector<>(); // a Vector for JList
            for (int i = 0; i < userOnlineInfoList.size(); i++) {
                listData.add(userOnlineInfoList.get(i).getUser() + " --- " + userOnlineInfoList.get(i).getStatus()); // add elements to Vector
            }
            theList.setListData(listData); // set data source for JList
        }
        catch (Exception e){
            e.printStackTrace();
        }
    }

我第一次调用此函数时,它从服务器获取数据。然后服务器的数据发生变化。我第二次调用此函数,数据与第一次相同。为什么呢?

2 个答案:

答案 0 :(得分:2)

您正在使用相同的ObjectOutputStream实例oos,该实例在第一次调用此方法时已用尽。如果再次初始化ObjectOutputStream,那么您将获得一个新流:

public void loadUserOnline() {
   // initialise oos here or before the call to this method
   ObjectOutputStream oos = new ObjectOutputStream(...... 
   try {
      oos.writeObject(req);
....

答案 1 :(得分:2)

每次要使用新值重新发送同一个对象时,都需要调用ObjectOutputStream.reset(),否则请使用writeUnshared()。见Javadoc。