问题描述
摘要我正在读取第一个兆字节的千兆字节文件,并试图将其关闭。令人惊讶的是,基础客户正在阅读它直到结束。目的是摆脱这种行为。
使用: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();
}
}
}
这看起来不太聪明,所以我想知道:
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)