我注意到有时,一个线程会调用 ObjectOutputStream 对象的 write 方法,例如 writeUTF()
,通过套接字发送一个值会自动刷新数据,这样我就不需要调用 flush()
在物体上。通信线路另一端的线程可以很好地接收数据。即使发送者线程在循环下对流对象写入数百次,这仍然有效。
其他时候,我的线程会死锁,因为发送者线程没有发送数据。当我手动调用 flush()
时,此问题得到解决调用后立即调用方法,例如writeUTF()
.
我怀疑这是随机的。我认为必须存在某种特定情况,在这种情况下写入流的线程会自动刷新数据。我想知道这些情况是什么(如果有的话)。
最佳答案
这取决于实现,并且可能会根据 Java 的平台、版本和构建而变化。最好的选择是在需要时调用flush()。如果没有要刷新的数据,则对flush()的调用非常快,因此这不会显着减慢您的程序。
关于java - ObjectOutputStream 对象有时会自动刷新。我如何才能准确地知道何时依赖此行为以及何时手动刷新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44060637/