java之IO流

概念

1)IO概念:Java程序对数据的操作是通过“流”IO的方式,IO流用来处理设备间的数据传输(上传和下载文件)
2)流的概念:流是一组有顺序的、有起点有终点的集合(Byte),是对数据传输的一种抽象,它就是为了数据传输。

案例分析

使用不同的流方式实现视频的拷贝,并记录耗时,比较其性能,大小114Mb

代码如下

import java.io.*; public class stream {     private static final String SRC_FILE = "E:\\9月.mp4";     private static final String DEST_FILE = "E:\\";     public static void main(String[] args) {         //copy01();//使用低级的字节流按照一个一个字节的形式复制文件         copy02();//使用低级的字节流按照一个一个字节数组的形式复制文件         copy03();//缓冲流一个一个字节复制         copy04();//缓冲流一个一个字节数组复制     }     /*     缓冲流一个一个字节数组复制      */     private static void copy04() {         long startTime = System.currentTimeMillis();         try (                 //把流放在这里最后可以不用释放资源,自动释放,相当于.close()方法                     //1.创建低级的字节输入流与源文件接通                          InputStream is = new FileInputStream(SRC_FILE);                          //a.将低级的字节缓冲输入流包装成高级的字节数组缓冲输入流                          InputStream bis = new BufferedInputStream(is);                          //2.创建低级的字节输出流与源文件接通                          OutputStream os = new FileOutputStream(DEST_FILE + "04.mp4");                          //b.将低级的输出管道包装成高级的字节数组缓冲管道                          OutputStream bos = new BufferedOutputStream(os);         ){             //3.定义一个字节数组             byte[] buffer = new byte[1024];             int len;             while ((len = bis.read(buffer)) != -1){                 bos.write(buffer,0,len);             }         }catch (Exception e){             e.printStackTrace();         }         long endTime = System.currentTimeMillis();         System.out.println("使用高级的字节数组缓冲流按照一个一个字节数组的形式复制文件耗时:" + (endTime - startTime)/1000.0 + "s");     }     /*     缓冲流一个一个字节复制      */     private static void copy03() {         long startTime = System.currentTimeMillis();         try (            //1.创建低级的字节输入流与源文件接通                          InputStream is = new FileInputStream(SRC_FILE);                          //a.把原始的低级字节输入流包装成高级的字节缓冲输入流                          InputStream bis = new BufferedInputStream(is);                          //2.创建低级的字节输出流与源文件接通                          OutputStream os = new FileOutputStream(DEST_FILE + "03.mp4");                          //a.把原始的低级字节输出流管道包装成高级的字节缓冲输出流管道                          OutputStream bos = new BufferedOutputStream(os);         ){             //3.定义一个字符常量记录每次读取的字节(一个一个的复制)—             int len;             while ((len = bis.read()) != -1){                 bos.write(len);             }         }catch (Exception e){             e.printStackTrace();         }         long endTime = System.currentTimeMillis();         System.out.println("使用高级的字节缓冲流按照一个一个字节数组的形式复制文件耗时:" + (endTime - startTime)/1000.0 + "s");     } /* 使用低级的字节流按照一个一个字节数组的形式复制文件  */     private static void copy02() {         long startTime = System.currentTimeMillis();         try (            //1.创建低级的字节输入流与源文件接通                          InputStream is = new FileInputStream(SRC_FILE);                          //2.创建低级的字节输出流与源文件接通                          OutputStream os = new FileOutputStream(DEST_FILE + "02.mp4");         ){             //3.定义一个字节数组             byte[] buffer = new byte[1024];             int len;             while ((len = is.read(buffer)) != -1){                 os.write(buffer,0,len);             }         }catch (Exception e){             e.printStackTrace();         }         long endTime = System.currentTimeMillis();         System.out.println("使用低级的字节流按照一个一个字节数组的形式复制文件耗时:" + (endTime - startTime)/1000.0 + "s");     }     /*     使用低级的字节流按照一个一个字节的形式复制文件      */     private static void copy01() {         //记录起始时间         long startTime = System.currentTimeMillis();         try (            //1.创建低级的字节输入流与源文件接通                          InputStream is = new FileInputStream(SRC_FILE);                          //2.创建低级的字节输出流与源文件接通                          OutputStream os = new FileOutputStream(DEST_FILE + "01.mp4");         ){             //3.定义一个字符常量记录每次读取的字节(一个一个的复制)—             int len;             while ((len = is.read()) != -1){                 os.write(len);             }         }catch (Exception e){             e.printStackTrace();         }         long endTime = System.currentTimeMillis();         System.out.println("使用低级的字节流按照一个一个字节的形式复制文件耗时:" + (endTime - startTime)/1000.0 + "s");     } }

效果如下,第一种方法就不跑了,单字节复制用时太长

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值