You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用无数据的ObjectInputStream的readObject()会触发异常吗?

关于ObjectInputStream.readObject()无数据时的行为及Piped流跨线程读写说明

核心问题解答

  • 当调用没有数据的ObjectInputStream.readObject()时,线程会进入阻塞状态,直到对应的ObjectOutputStream写入数据,或者输出端的流被关闭。
  • 如果输出端流被关闭(比如对应的ObjectOutputStream或PipedOutputStream被关闭),此时readObject()会抛出EOFException——这是IOException的子类,属于I/O异常范畴。

Piped流配合Object流跨线程读写的注意事项

  • 必须将PipedInputStream和PipedOutputStream分别交给不同线程持有并操作,避免在同一个线程中同时操作两个流导致死锁。
  • 写线程在完成数据写入后,务必调用ObjectOutputStream.flush()确保数据推送到管道,或者调用close()(如果后续不再写入),否则读线程会一直阻塞在readObject()上。
  • 读线程需要捕获EOFException,以此判断写线程是否已经结束数据传输,避免无意义的阻塞。

内容的提问来源于stack exchange,提问作者Hareeswaran

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 11:25:27