日期:2014-05-20  浏览次数:20800 次

关于通过Socket实现服务器和客户端进行通信,writeObject和readObject的问题
如果我在服务器端,给流里面连续写两个对象,如下:
ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream);
oos.writeObject(user);//user不为空
oos.writeObject(command);//command不为空
那么我在客户端用
  ois.readObject();
读一个对象时,始终读不到第二个,该怎么做?

------解决方案--------------------
你在线程里读,用序例化来读取。
------解决方案--------------------
没说清楚,你是发送了两个不同的对象,还是把一个对象修改了两次并发送它两次。

如果是第二种情况我也碰到过,原因是 Java 为了防止一个对象因为被引用多次而发送多次的情况(比如:a.getPrevious().getNext() 是这个对象自己时是可能发送两次 a)而设置标记,已经发送过的发送第二次时会跟上次完全相同,因为它认为是同一个对象,因为它的对象标识相同。解决问题的办法是 ObjectOutputStream.reset().复位一下就正常了,它表示一个对象发送完毕了。