2012-11-01 51 views
0

我有一個函數的ObjectOutputStream在Java中

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

你必須要重新發送相同的對象用新值,或者使用writeUnshared()每次打電話ObjectOutputStream.reset()。看到Javadoc。

+0

我嘗試調用ObjectOutputStream.reset(),它的工作原理。謝謝你@EJP –

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); 
.... 
+0

有沒有這樣的事情「筋疲力盡」一個ObjectOutputStream,如果對方也使用在完全相同的時刻一個新ObjectInputStream的,這是相當困難的組織和還略顯低效由於空間開銷建議的解決方案僅適用。否則,讀者得到StreamCorruptedException:無效的類型代碼AC。 -1。 – EJP

相關問題