缓冲字节流(BufferedInputStream、BufferedOutputStream)
BufferedInputStream 是输入流,字节流,处理流;BufferedOutputStream 是输出流,字节流,处理流。
缓冲字节流是对其他字节流的包装,不直接读写数据源设备,缓冲流的工作原理如下:
import java.io.*; /* // 分别测试四种方式的效率 1.一次读写一个字节 ③ 2.一次读写一个字节数组 ① 3.缓冲流一次读写一个字节 ② 4.缓冲流一次读写一个字节数组 ① 优先使用这种 */ public class Test { public static void main(String[] args) throws IOException { // copyFile01(); // copyFile02(); // copyFile03(); copyFile04(); } // 一次读写一个字节:109s public static void copyFile01() throws IOException{ FileInputStream fis = new FileInputStream("D:\\course\\资料\\nwt_setup_3.4.3045.exe"); FileOutputStream fos = new FileOutputStream("day09\\nwt_setup_3.4.3045.exe"); long start = System.currentTimeMillis(); // 获取当前时间 int by; while ((by = fis.read()) != -1){ fos.write(by); } long end = System.currentTimeMillis(); System.out.println("耗时:" + (end - start) + "ms"); fis.close(); fos.close(); } // 8192字节数组:46ms 、1024字节数组:183ms public static void copyFile02() throws IOException{ FileInputStream fis = new FileInputStream("D:\\course\\资料\\nwt_setup_3.4.3045.exe"); FileOutputStream fos = new FileOutputStream("day09\\nwt_setup_3.4.3045.exe"); long start = System.currentTimeMillis(); // 获取当前时间 int len; byte[] bytes = new byte[1024]; // 定义数组 while ((len = fis.read(bytes)) != -1){ fos.write(bytes,0,len); } long end = System.currentTimeMillis(); System.out.println("耗时:" + (end - start) + "ms"); fis.close(); fos.close(); } // 时间894ms 缓冲区大小默认8192字节 public static void copyFile03() throws IOException{ FileInputStream fis = new FileInputStream("D:\\course\\资料\\nwt_setup_3.4.3045.exe"); BufferedInputStream bis = new BufferedInputStream(fis); FileOutputStream fos = new FileOutputStream("day09\\nwt_setup_3.4.3045.exe"); BufferedOutputStream bos = new BufferedOutputStream(fos); long start = System.currentTimeMillis(); // 获取当前时间 int by; while ( (by = bis.read()) != -1){ bos.write(by); } long end = System.currentTimeMillis(); System.out.println("时间:" + (end - start) + "ms"); // bos.flush(); // 手动刷新缓冲区 bis.close(); // 关闭此输入流并释放与该流关联的所有系统资源 bos.close(); // 将缓冲区中最后一次没有满的数据,手动刷新到文件中 } // 1024字节数组 + 8192缓冲区 62ms / 8192字节数组 + 8192缓冲区 45 - 55ms之间 public static void copyFile04() throws IOException{ FileInputStream fis = new FileInputStream("D:\\course\\资料\\nwt_setup_3.4.3045.exe"); BufferedInputStream bis = new BufferedInputStream(fis); FileOutputStream fos = new FileOutputStream("day09\\nwt_setup_3.4.3045.exe"); BufferedOutputStream bos = new BufferedOutputStream(fos); long start = System.currentTimeMillis(); // 获取当前时间 int len; byte[] bytes = new byte[8192]; // 定义数组 while ((len = bis.read(bytes)) != -1){ bos.write(bytes,0,len); } long end = System.currentTimeMillis(); System.out.println("时间:" + (end - start) + "ms"); bis.close(); bos.close(); } }
分类:
阶段2:Javase
标签:
IO流
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)