Java中的ObjectOutputStream

Java中的ObjectOutputStream,java,objectinputstream,Java,Objectinputstream,我有一个函数 public void loadUserOnline() { try { oos.writeObject(req); //Send request to Server to get online users oos.flush(); LinkedList<UserOnlineInfo> userOnlineInfoList = (LinkedList<UserOnlineInf

我有一个函数

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();
        }
    }
public void loadUserOnline(){
试一试{
oos.writeObject(req);//向服务器发送请求以获取联机用户
oos.flush();
LinkedList userOnlineInfoList=(LinkedList)ois.readObject();//从服务器读取的对象包含在线用户
Vector listData=new Vector();//用于JList的向量
对于(int i=0;i

第一次调用此函数时,它从服务器获取数据。然后,来自服务器的数据发生更改。我第二次调用这个函数,数据与第一次相同。为什么?

您使用的是同一个ObjectOutputStream实例,
oos
,该实例在第一次调用此方法时已耗尽。如果再次初始化ObjectOutputStream,则会得到一个新流:

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

您使用的是同一个ObjectOutputStream实例,
oos
,该实例在第一次调用此方法时已耗尽。如果再次初始化ObjectOutputStream,则会得到一个新流:

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

每次要使用新值重新发送同一对象时,需要调用
ObjectOutputStream.reset()
,或者使用
writeUnshared()
。请参阅Javadoc。

您需要调用
ObjectOutputStream.reset()
,每次您要用新值重新发送同一对象,或者使用
writeUnshared()
。请参阅Javadoc。

不存在“耗尽”ObjectOutputStream的情况,建议的解决方案只有在对等方同时使用新ObjectInputStream时才有效,这很难组织,而且由于空间开销,效率也稍低。否则,读者会得到StreamCorruptedException:类型代码AC.-1无效。不存在“耗尽”ObjectOutputStream的情况,并且建议的解决方案只有在对等方同时使用新ObjectInputStream时才有效,这很难组织,而且由于空间开销,效率稍低。否则,读取器将获得StreamCorruptedException:无效的类型代码AC.-1。我尝试调用ObjectOutputStream.reset(),它就可以工作了。谢谢@EJPI尝试调用ObjectOutputStream.reset()并成功。谢谢你@EJP