Java输入流缓冲对象?

时间:2011-05-08 18:56:07

标签: java sockets object stream

我有一个客户端 - 服务器应用程序,每次新的客户端套接字加入时,服务器都会向所有客户端发送所有客户端的列表。问题是,当新客户端加入它时会得到正确的列表,但旧客户端会获得他们加入时自己获得的旧列表。 有点像每次从输入流中获取相同的对象。

我可以以某种方式刷新输入流吗?

阅读对象:

while((inObject = in.readObject()) != null) {
   ...
}

发送对象:

out.writeObject(object);

2 个答案:

答案 0 :(得分:6)

ObjectOutputStream.reset()正是您要找的。

它还可以防止内存不足,否则可能会发生内存不足。原因是ObjectInput / OutputStream类缓存了通过它们发送的所有对象,这也防止了这些对象被垃圾收集。这对于处理循环引用是必要的,并且还可以在多次发送对象时提高性能。

答案 1 :(得分:2)

我怀疑问题在于您是在修改现有对象,然后重用现有的ObjectOutputStream。在reset上调用ObjectOutputStream可以有效地清除对潜在修改对象的引用缓存。