缓冲流
作用是提高IO流的读写速度,分为字节缓冲流与字符缓冲流。
字符缓冲流常用的类有BufferedReader类和BufferedWriter类,分别是缓冲字符输入流和缓冲字符输出流
字节缓冲流常用的类有BufferedInputStream类、BufferedOutputStream类,分别是缓冲字节输出流和缓冲字节输入流。
字节缓冲流
与字节流一样,他也有对应的输入和输出与字节流搭配使用。
下面对一个文件复制,来展示两个类的作用:
FileInputStream fis3 = new FileInputStream("D:\demo0723\jdk1.8.zip"); BufferedInputStream bis1=new BufferedInputStream(fis3); FileOutputStream fos3 =new FileOutputStream("D:\demo0723\jdk1.8(4).zip"); BufferedOutputStream bos1=new BufferedOutputStream(fos3); int len3=0; byte[] b2=new byte[1024]; while((len3=bis1.read(b2))!=-1){ bos1.write(b2, 0, len3); } bis1.close(); bos1.close(); }
文件复制一般的步骤:1.明确数据源2.添加缓冲流3.明确目的地4.添加缓冲流5.开始复制6.释放资源
字符缓冲流
字符缓冲流,只能用于文本文档的读取读出缓冲操作,两个类的使用可以参考字节缓冲流的使用。
实例(以文件复制为例):
1 //明确数据源 2 FileReader fr=new FileReader("D:\demo0723\b.txt"); 3 //添加缓冲流 4 BufferedReader br=new BufferedReader(fr); 5 //明确目的地 6 FileWriter fw=new FileWriter("D:\demo0723\b\bb.txt"); 7 //添加缓冲流 8 BufferedWriter bw=new BufferedWriter(fw); 9 //开始复制 10 int len=0; 11 char[] ch=new char[1024]; 12 while((len=br.read(ch))!=-1){ 13 bw.write(ch, 0, len); 14 } 15 //释放资源 16 bw.close(); 17 br.close(); 18 }
注意:
字节流中换行符是: ;
在字节缓冲流中写入换行是调用newLine()方法,读取文本行是readLine();
对比字节流复制和加入缓冲流复制文件的速度
为了较快复制文件,我将用数组单位复制:
1 //普通字节流一个字节数组为单位复制jdk 2 FileInputStream fis2 = new FileInputStream("D:\demo0723\jdk1.8.zip"); 3 FileOutputStream fos2 =new FileOutputStream("D:\demo0723\jdk1.8(3).zip"); 4 long start3=System.currentTimeMillis(); 5 int len2=0; 6 byte [] b1=new byte [1024]; 7 while((len2=fis2.read(b1))!=-1){ 8 fos2.write(b1,0,len2); 9 } 10 fis2.close(); 11 fos2.close(); 12 long end3=System.currentTimeMillis(); 13 long time2=end3-start3; 14 System.out.println("普通字节流数组的时间:"+time2); 15 16 //缓冲字节流一个字节数组为单位复制jdk 17 FileInputStream fis3 = new FileInputStream("D:\demo0723\jdk1.8.zip"); 18 BufferedInputStream bis1=new BufferedInputStream(fis3); 19 FileOutputStream fos3 =new FileOutputStream("D:\demo0723\jdk1.8(4).zip"); 20 BufferedOutputStream bos1=new BufferedOutputStream(fos3); 21 long start4=System.currentTimeMillis(); 22 int len3=0; 23 byte[] b2=new byte[1024]; 24 while((len3=bis1.read(b2))!=-1){ 25 bos1.write(b2, 0, len3); 26 } 27 bis1.close(); 28 bos1.close(); 29 long end4=System.currentTimeMillis(); 30 long time3=end4-start4; 31 System.out.println("缓冲字节流数组的时间:"+time3);
执行结果如图所示:
加入缓冲流后复制速度明显加快了。