Java文件复制,模拟右键复制(字节流,缓冲流)

Ada ·
更新时间:2024-09-21
· 565 次阅读

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"); } }
作者:隔叶听风



字节流 JAVA java文件 缓冲

需要 登录 后方可回复, 如果你还没有账号请 注册新账号