下载部分采用HttpURLConnection类,代码如下:
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setRequestMethod("GET");
urlConnection.setRequestProperty("Accept-Language", "zh-CN");
urlConnection.setRequestProperty("Referer", url.toString());
urlConnection.setRequestProperty("Charset", "UTF-8");
urlConnection.setRequestProperty("Range", "bytes=" + begin + "-" + end);
urlConnection.setRequestProperty("Connection", "Keep-Alive");
urlConnection.connect();
InputStream is = urlConnection.getInputStream();
//创建缓冲区,缓冲区大小为500K
int bufferSize= 500*1024;
byte[] buffer = new byte[bufferSize];
int perRead = 0;
this.raf.seek(begin);
while ((perRead = is.read(buffer)) != -1) {
print("read data size: "+perRead);
raf.write(buffer, 0, perRead);
this.part.setCurrentLength(this.part.getCurrentLength()+ perRead);
}
由于下载的文件都很大,我想采用加大缓冲区的方式来实现快速下载,因此给缓冲区设置了500K的大小,希望每次能从服务器多获取数据,也减少写入本地文件的次数。可是实际运行程序看打印结果发现,perRead = is.read(buffer) 一般一次读取8192字节, 但是偶尔也能读取更多的字节。 照此情况,每次从服务器读取的数据远比缓冲区设置的500K要小,这是怎么回事呢? 是不是下载的服务器有相关的限制需要重新配置一下(使用Apache作为web服务器)?
以下是执行程序打出的数据:
从图片可知,一般情况一次获取8K,有时也能获取到更多的数据。请大家指点一下,如何才能通过inputStream尽可能多的从服务器获取文件数据?