我在服务器中有40 MB文件,我正在使用
下载我的文件HttpURLConnection c = (HttpURLConnection) u.openConnection();
c.setRequestMethod("GET");
c.setDoOutput(true);
c.connect();
FileOutputStream f = new FileOutputStream(new File("trips.xml"));
InputStream in = c.getInputStream();
byte[] buffer = new byte[1024];
int len1 = 0;
while ( (len1 = in.read(buffer)) != -1 ) {
f.write(buffer,0, len1);
这段代码似乎工作正常,但耗时太长。是他们能够更快地完成这个过程的任何方式。
/ minhaz
答案 0 :(得分:3)
使用大于1 KB的较大输入缓冲区。清空缓冲区的速度越快,网络堆栈就可以继续下载。这应该有所帮助:
byte[] buffer = new byte[50*1024];
答案 1 :(得分:2)
这个非常丑陋的黑客 可能给你一个更快的下载时间,或者可能没有,你必须在你的条件下测试它:
启动多个并行连接(在单独的线程中?),每个应该下载不同的数据块(使用HTTP 1.1 Range header)。根据许多事情,例如满月,或太阳出来或玫瑰盛开,你可能会得到更好的结果,因为它会比单一连接更好地使你的链接饱和(牺牲其他人共享你的链接,有点像BitTorrent的作用。)
答案 2 :(得分:1)
我遇到了同样的问题,想出了这段代码。比我以前尝试的版本更快。我指定的缓冲区大小大于我要下载的文件。希望它有所帮助。
public String load(String url, int bufferSize){
try {
URL myURL = new URL(url);
URLConnection ucon = myURL.openConnection();
ucon.setRequestProperty("Connection", "keep-alive");
InputStream inputStream = ucon.getInputStream();
BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);
ByteArrayBuffer byteArrayBuffer = new ByteArrayBuffer(bufferSize);
byte[] buf = new byte[bufferSize];
int read;
do {
read = bufferedInputStream.read(buf, 0, buf.length);
if (read > 0)
byteArrayBuffer.append(buf, 0, read);
} while (read >= 0);
return new String(byteArrayBuffer.toByteArray());
} catch (Exception e) {
Log.i("Error", e.toString());
}
return null;
}