java - ObjectOutputStream 对象有时会自动刷新。我如何才能准确地知道何时依赖此行为以及何时手动刷新?

标签 java multithreading sockets

我注意到有时,一个线程会调用 ObjectOutputStream 对象的 write 方法,例如 writeUTF() ,通过套接字发送一个值会自动刷新数据,这样我就不需要调用 flush()在物体上。通信线路另一端的线程可以很好地接收数据。即使发送者线程在循环下对流对象写入数百次,这仍然有效。

其他时候,我的线程会死锁,因为发送者线程没有发送数据。当我手动调用 flush() 时,此问题得到解决调用后立即调用方法,例如writeUTF() .

我怀疑这是随机的。我认为必须存在某种特定情况,在这种情况下写入流的线程会自动刷新数据。我想知道这些情况是什么(如果有的话)。

最佳答案

这取决于实现,并且可能会根据 Java 的平台、版本和构建而变化。最好的选择是在需要时调用flush()。如果没有要刷新的数据,则对flush()的调用非常快,因此这不会显着减慢您的程序。

关于java - ObjectOutputStream 对象有时会自动刷新。我如何才能准确地知道何时依赖此行为以及何时手动刷新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44060637/

相关文章:

performance - 本地 IPC 的平均性能测量

java - NullPointerException 因为重写函数并被父类(super class)调用

java - 无法理解 Java 中的并发性,尝试阅读推荐书籍

Android:消息中的ArrayList

ios - 直接执行方法和在 dispatch_async(dispatch_get_main_queue(), ^{}) block 中执行方法有什么区别

java - 如何使用当前线程来处理一个工作队列?

c++ - Node js 服务器和 c++ 客户端套接字 io 连接,无法发出或读取数据

java - 如何将Java写的 "ArrayList<ClassNod>"转成C++程序语言?

java - 非法参数异常 : Authorities list must not be null

javascript - 在 NodeJS 上跨页面请求维护后端连接?