gpt4 book ai didi

java - Apache HTTPClient 4.x CloseableHttpClient 下载二进制数据时大小错误

转载 作者:行者123 更新时间:2023-12-02 03:56:45 24 4
gpt4 key购买 nike

我正在使用 Apache HttpClient 4.5.1 下载“.tgz”文件,并在 Windows 上运行我的客户端程序。

当我运行时,我下载的文件大小为 4,423,680(并且由于大小错误而无法打开)。但文件的实际大小是 4,414,136(使用“wget”)。

当我使用 DefaultHttpClient (已弃用)而不是 CloseableHttpClient (所有其他代码都相同)时,问题就消失了。

产生问题的代码:

import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.client.HttpClients;
CloseableHttpClient httpClient = HttpClients.createDefault();
(or)
CloseableHttpClient httpClient = HttpClientBuilder.create().build();

// the following code is the same in both cases
HttpGet httpGet = new HttpGet(url);
HttpResponse response = httpClient.execute(httpGet);
try {
BufferedInputStream bis = new BufferedInputStream(entity.getContent());
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(new File(filePath)));
int inByte;
while ((inByte = bis.read()) != -1 ) {
bos.write(inByte);
}
}
....

解决问题的代码:

 import org.apache.http.impl.client.DefaultHttpClient;
...
HttpClient httpClient = new DefaultHttpClient();
... <same code>....

DefaultHttpClient 已被弃用,但它似乎工作正常。
不明白 CloseableHttpClient 有什么问题。

最佳答案

我想给你一些建议。

首先,我认为您需要关闭响应,因此请使用try-with-resource block 或在try-catch block 中添加finally block

try(HttpResponse response = httpClient.execute(httpGet)) {
....

finally
{
response.close();
}

也许您已经关闭了它并且没有将其复制到示例中。如果是这样的话,请原谅我。

第二。每次我遇到类似的行为都是因为输出流没有刷新和关闭。我的意思是,您需要在代码末尾刷新关闭bos流。

最后说明:这只是一条评论。也许这并不能解决你的问题。很抱歉,但我不明白为什么使用其他 Http 客户端不会重现相同的问题。

关于java - Apache HTTPClient 4.x CloseableHttpClient 下载二进制数据时大小错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35372514/

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