gpt4 book ai didi

java - Jersey 客户端关闭 InputStream 响应 - 它真的有效吗?

转载 作者:搜寻专家 更新时间:2023-10-31 20:18:19 25 4
gpt4 key购买 nike

我正在使用 Jersey Client v2.16(我也在使用 Dropwizard 0.8.0 的传递依赖项)。

当实体被读取为 InputStream 时,我对响应的关闭机制感到困惑。 documentation状态:

Also if the entity is read into an InputStream (by response.readEntity(InputStream.class)), the connection stays open until you finish reading from the InputStream. In that case, the InputStream or the Response should be closed manually at the end of reading from InputStream.

但是,当我使用 Response.readEntity(InputStream.class) 获取响应实体时,我最终得到的是 org.glassfish.jersey.message.internal 的一个实例。 ReaderInterceptorExecutor$UnCloseableInputStream,顾名思义,当 close() 方法被调用时,它不会释放它下面的任何东西(打破 InputStream 契约,我可能说)。这是 close() 方法:

@Override
public void close() throws IOException {
if (LOGGER.isLoggable(Level.FINE)) {
LOGGER.log(Level.FINE, LocalizationMessages.MBR_TRYING_TO_CLOSE_STREAM(reader.getClass()));
}
}

因此,我的池中的 HTTP 连接最终未释放并慢慢填满池。

鉴于获取对响应的引用可能不是很容易,并且官方文档声明InputStream **或** Response 应该手动关闭,如何我设法实际释放物理资源?

最佳答案

看起来这是 Jersey Client 的一个已知错误,根据 https://java.net/jira/browse/JERSEY-2878 似乎已在 2.21 中修复和 https://github.com/jersey/jersey/releases/tag/2.21

关于java - Jersey 客户端关闭 InputStream 响应 - 它真的有效吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33235593/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com