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