HttpClient API不保存大小超过1.9 kb的图像

时间:2011-03-19 17:22:49

标签: java httpclient binaryfiles

我一直陷入一个奇怪的问题。 我正在使用org.apache.http.impl.client.HttpClient api在两个网站之间进行XML和媒体传输, 现在,当使用DefaultHttpClient从网络上读取二进制内容(我的情况下的图像)时,只保存了1.9 kb的图像。 问题很奇怪,因为代码在我的开发环境(windows和ubuntu linux)上工作正常, 但只出现在我的生产环境SUSE linux上。

下面是我用来保存文件的代码。

HttpResponse response = defaultHttpClient.execute(request);
InputStream stream = response.getEntity().getContent();
byte[] buffer = new byte[10024];
int count = stream.read(buffer);
buffer = Arrays.copyOf(buffer, count);
FileOutputStream fstream = new FileOutputStream("myFile.jpeg",true);
fstream.write(buffer, 0, count);
fstream.flush();
fstream.close();
stream.close();

任何帮助将不胜感激。

由于
SHAILESH。

3 个答案:

答案 0 :(得分:0)

在创建字节缓冲区之前,您应该检查响应的内容长度。

其次,您应该检查变量计数中读取了多少字节。

答案 1 :(得分:0)

您的问题是,您只是在阅读buffer.length个数据(10024)字节,而您却没有阅读其余数据。

做一些这样的事情:

HttpResponse response = defaultHttpClient.execute(request);
InputStream stream = response.getEntity().getContent();
FileOutputStream fstream = new FileOutputStream("myFile.jpeg",true);
byte[] buffer = new byte[10024];
int count = -1;
while ((count = stream.read(buffer)) != -1) {
    fstream.write(buffer);
}
fstream.flush();
fstream.close();
stream.close();

另外,我会关闭Closeable try-finally块中的所有finally个对象(保证)。

答案 2 :(得分:0)


public int read(byte[] b)
         throws IOException

从输入流中读取一些个字节,并将它们存储到缓冲区数组b中。


您对#read方法合同的理解是错误的。无法保证read方法将在一次调用中检索整个响应内容,即使它非常小。必须继续从输入流读取,直到流结束(读取操作返回-1)