【问题标题】:Why does using an ObjectInputStream in conjunction with GZIP cause the O.I.S. block the thread?为什么将 ObjectInputStream 与 GZIP 结合使用会导致 O.I.S.阻塞线程?
【发布时间】:2012-03-09 21:39:46
【问题描述】:

我目前有一个简单的系统设置,其中 ObjectInputStream 直接从连接到客户端 Socket 输入流的 GZIPInputStream 读取:

        InputStream stream = s.getInputStream();

        GZIPInputStream gis = new GZIPInputStream(stream);

        ObjectInputStream input = new ObjectInputStream(gis);
        System.out.println(input);

        return input;

问题在于,ObjectInputStream 尝试读取流标头并开始阻塞线程。为什么会发生这种情况,和/或我该如何阻止这种情况发生?

【问题讨论】:

标签: java gzip objectinputstream


【解决方案1】:

InputStream read() 将阻塞,直到数据可用、检测到流结束或抛出异常。为防止主代码路径阻塞,请使用后台线程进行读取。当然,后台线程将阻塞,直到字节可用。意外阻塞可能是发送方的错误。

【讨论】:

  • 阻塞的是 ObjectInputStream,这是因为 GZIPInputStream 没有对标头进行解压缩。 ://
猜你喜欢
  • 1970-01-01
  • 2021-05-30
  • 2021-08-29
  • 2012-03-27
  • 2011-12-01
  • 2021-10-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多