我一直陷入一个奇怪的问题。
我正在使用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。
答案 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)