代码之家  ›  专栏  ›  技术社区  ›  Rodion Gorkovenko

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

  •  0
  • Rodion Gorkovenko  · 技术社区  · 5 年前

    摘要

    在springbatch内部使用:java8、apachehttpclient(我想是4.5.11)。

    细节: 应用程序使用 BufferedInputStream 环绕返回的输入流 HttpEntity . 我们只需要文件的头(来决定在哪里委托它的处理),所以spring批处理步骤就不再读了。然而,当spring的整个实现在调试结束时会显示出底层的流。这是非常不必要的(需要很长时间,可能会导致工作不完整)。

    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. 有没有更正确的方法来防止不必要的获取整个文件?
    0 回复  |  直到 5 年前