JavaEE学习日志持续更新----> 必看!JavaEE学习路线(文章总汇)
模拟复制粘贴字节流模拟复制粘贴缓冲流模拟复制粘贴(更高效) 字节流模拟复制粘贴明确:
数据源:D:\jdk-11中文api修订版.CHM 目的地:E:\jdk-11中文api修订版.CHM被复制的文件:56.4 MB (59,176,862 字节)
文件复制的步骤:
创建文件字节输入流的FileInputStream对象,构造方法中绑定要读取的数据源 创建文件字节输出流FileOutputStream对象,构造方法中绑定要写入的目的地 使用FileInputStream对象中的方法read读取文件 使用FileOutputStream对象中的方法write,把读取到的数据写入到目的地中 释放资源(先关写,后关读)注意:
使用一次读取多个字节,写入多个字节的方式,可大幅提高效率 可根据电脑配置和内存使用情况,调整byte数组的大小,在一定范围之内,byte数组越大,效率越高。超过这个范围,内存占用空间过大,会导致效率降低。效率测试:56.4 MB (59,176,862 字节) 复制文件共耗时为659ms
代码示例:
public class Demo01 {
public static void main(String[] args) throws IOException {
long s = System.currentTimeMillis();
//1.创建文件字节输入流的FileInputStream对象,构造方法中绑定要读取的数据源
FileInputStream fis = new FileInputStream("d:\\jdk-11中文api修订版.CHM");
//2.创建文件字节输出流FileOutputStream对象,构造方法中绑定要写入的目的地
FileOutputStream fos = new FileOutputStream("e:\\jdk-11中文api修订版.CHM");
//一次读取一个字节,写一个字节的方式复制文件
//3.使用FileInputStream对象中的方法read读取文件
// int len = 0;
// while((len = fis.read())!=-1){
// //4.使用FileOutputStream对象中的方法write,把读取到的数据写入到目的地中
// fos.write(len);
// }
//一次读取一个字节,效率太慢!
//使用一次读取多个字节,写入多个字节的方式
byte[] bytes = new byte[1024*120];
int len = 0;
while((len = fis.read(bytes))!=-1){
fos.write(bytes,0,len);
}
//5.释放资源(先关写,后关读)
fos.close();
fis.close();
long e = System.currentTimeMillis();
System.out.println("复制文件共耗时:"+(e-s)+"ms");
}
}
缓冲流模拟复制粘贴(更高效)
使用缓冲流复制文件:效率高
使用步骤:
创建字节缓冲输入流BufferedInputStream对象,构造方法传递FileInputStream对象 创建字节缓冲输入流BufferedOutputStream对象,构造方法传递FileOutputStream对象 使用BuffedInputStream对象的方法read,读取文件 使用BufferedOutputStream对象的方法write,把读取的数据写入缓冲区 释放资源(会先刷新)效率测试:56.4 MB (59,176,862 字节) 复制文件共耗时为164ms
代码示例:
public class Demo02 {
public static void main(String[] args) throws IOException {
long s = System.currentTimeMillis();
//1.创建字节缓冲输入流BufferedInputStream对象,构造方法传递FileInputStream对象
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("d:\\jdk-11中文api修订版.CHM"));
//2.创建字节缓冲输入流BufferedOutputStream对象,构造方法传递FileOutputStream对象
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("e:\\jdk-11中文api修订版.CHM"));
byte[] bytes = new byte[1024];
int len = 0;
while((len = bis.read(bytes))!=-1){
bos.write(bytes,0,len);
}
//5.释放资源(先关写,后关读)
bos.close();
bis.close();
long e = System.currentTimeMillis();
System.out.println("复制文件共耗时:"+(e-s)+"ms");
}
}