java从服务器下载文件时,为什么必须先创建一个和服务器文件大小相同的临时文件?
这是习惯,因为你不这样,文件大小就是在下载过程中动态变化,这不是好事。。。改变文件大小本身就有一系列对文件系统的操作,因为第一次被分配的文件位置并不一定有这么大的连续空间,增大文件大小,那么只能从别的空间找然后连接到这个文件上,逻辑上是连续的,物理上是不连续的,那么文件就在存储器上就变成分散的了,也就是分成好多碎片,在不同的位置,这对于读写来说严重影响速度。。。因为无论是硬盘还是flash都不是随机存储器,以分散就要频繁的定位。。。
最好是让文件在连续的区域内,那么你一开始就设定大小,那么系统会尽量分配到连续的存储区,
strUrl为文件地址,fileName为文件在本地的保存路径,试试吧~
public static void writeFile(String strUrl, String fileName) {
URL url = null;
try {
url = new URL(strUrl);
} catch (MalformedURLException e2) {
e2printStackTrace();
}
InputStream is = null;
try {
is = urlopenStream();
} catch (IOException e1) {
e1printStackTrace();
}
OutputStream os = null;
try {
os = new FileOutputStream( fileName);
int bytesRead = 0;
byte[] buffer = new byte[8192];
while ((bytesRead = isread(buffer, 0, 8192)) != -1) {
oswrite(buffer, 0, bytesRead);
}
Systemoutprintln("下载成功:"+strUrl);
} catch (FileNotFoundException e) {
eprintStackTrace();
} catch (IOException e) {
eprintStackTrace();
}
}
0条评论