我有一个客户端 - 服务器应用程序,每次新的客户端套接字加入时,服务器都会向所有客户端发送所有客户端的列表。问题是,当新客户端加入它时会得到正确的列表,但旧客户端会获得他们加入时自己获得的旧列表。 有点像每次从输入流中获取相同的对象。
我可以以某种方式刷新输入流吗?
阅读对象:
while((inObject = in.readObject()) != null) {
...
}
发送对象:
out.writeObject(object);
答案 0 :(得分:6)
ObjectOutputStream.reset()
正是您要找的。
它还可以防止内存不足,否则可能会发生内存不足。原因是ObjectInput / OutputStream类缓存了通过它们发送的所有对象,这也防止了这些对象被垃圾收集。这对于处理循环引用是必要的,并且还可以在多次发送对象时提高性能。
答案 1 :(得分:2)
我怀疑问题在于您是在修改现有对象,然后重用现有的ObjectOutputStream
。在reset
上调用ObjectOutputStream
可以有效地清除对潜在修改对象的引用缓存。