微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决在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 举报,一经查实,本站将立刻删除。