在Java,Apache HttpClient中的EOF之前关闭EofSensorInputStream

问题描述

摘要我正在读取第一个兆字节的千兆字节文件,并试图将其关闭。令人惊讶的是,基础客户正在阅读它直到结束。目的是摆脱这种行为。

使用:Java 8,Apache HttpClient(我认为是4.5.11),位于spring-batch中。

详细信息::应用使用BufferedInputStream包装的httpentity返回的输入流。我们只需要文件的标头(来决定将其委托给何处)-因此spring-batch步骤不再赘述。但是,当spring-batch尝试关闭此缓冲流时,调试显示基础实现会读取整个流直到结束。这是非常不希望的(需要很长时间,可能会使工作不完整)。

我发现httpentity给出的流是EofSensorInputStream,所以草率补丁是

class AbortableBufferedInputStream extends BufferedInputStream {

    InputStream input;

    AbortableBufferedInputStream(InputStream in,int bufferSize) {
        super(in,bufferSize);
        input = in;
    }

    @Override public void close() {
        if (input instanceof EofSensorInputStream) {
            ((EofSensorInputStream) input).abortConnection();
        }
    }

}

这看起来不太聪明,所以我想知道:

  1. 以上链接中的文档中对此行为进行了解释吗(也许我听不懂)
  2. 是否有更正确的方法来防止不必要地提取整个文件

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)