BufferedOutputStream 为输出流提供了一个缓冲区,这样可以确保不是每次读取一个字节,而是每次读取一大块儿内容到缓冲区中,从而大大提高IO速度。这通常要比每次读取单字节要快得多。
推荐方式:
//将文件流(InputStream)写入文件
long size = 0;
BufferedInputStream in = new
BufferedInputStream(input);
BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(targetFilePath));
int len = -1;
byte[] b = new byte[1024];
while((len = in.read(b)) != -1){
out.write(b, 0, len);
size += len;
}
in.close();
out.close();
下面这种方式不行,如果文件较大,这样写会非常耗时。比如 160M 的文件,while 要循环 160 * 1024 * 1024 次....
data = new byte[input.available()];
int len = 0;
fileOutputStream = new FileOutputStream(targetFilePath,true);
while ((len = input.read(data)) != -1) {
fileOutputStream.write(data, 0, len);
}
System.out.println("下载文件成功");
log.info("下载文件成功 ossFileId = {} targetFilePath = {}",ossFileId,targetFilePath);
网友评论