java-大文件下载
- 开始时使用的是 BufferedReader读取流,String line = reader.readLine()获取数据,并且写入BufferedWriter writer .write(),对于处理2GB以下的可以成功下载,出现问题:
- 对于2GB以上的不可以,会报错java.lang.outofmemoryerror: required array length is too large.
- 下载速度慢,当时下载 100MB.txt还以为卡住了
- 下载过后的大文件要进行hash校验,查看是否值一致
md5sum 文件名
- 可以使用流来逐块下载文件,而不是一次性将整个文件加载到内存中。
try (InputStream in = url.openStream();
ReadableByteChannel rbc = Channels.newChannel(in);
FileOutputStream fos = new FileOutputStream(saveDir)) {
fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
}