总结于尚硅谷学习视频
一、缓冲流的使用
1、缓冲流:- BufferedInputStream
- BufferedOutputStream
- BufferedReader
- BufferedWriter
- 2、作用:提高流的读取、写入速度
- 提高读写速度的原因:内部提供了一个缓存区
- 3、处理流,就是“套接”在已有的流的基础上。
二、一般步骤
- 1、造文件
- 2、造流
- 2.1造文件流
- 2.2造缓冲流
- 3.复制的细节:读写
- 4.资源关闭
三、代码
BufferedStream类
package com.day0316_1; import org.junit.jupiter.api.Test; import java.io.*; /** * 处理流之一:缓冲流的使用 * * 1、缓冲流: * BufferedInputStream * BufferedOutputStream * BufferedReader * BufferedWriter * * 2、作用:提高流的读取、写入速度 * 提高读写速度的原因:内部提供了一个缓存区 * * 3、处理流,就是“套接”在已有的流的基础上。 * * */ public class BufferedStream { @Test public void BufferedStreamTest() { FileInputStream fis= null; FileOutputStream fos= null; BufferedInputStream bis= null; BufferedOutputStream bos= null; try { //1、造文件 File srcFile=new File("图片.png"); File destFile=new File("图片1.png"); //2、造流 //2.1造文件流 fis = new FileInputStream(srcFile); fos = new FileOutputStream(destFile); //2.2造缓冲流 bis = new BufferedInputStream(fis); bos = new BufferedOutputStream(fos); //3.复制的细节:读写 byte[] buffer=new byte[10]; int len; while((len=bis.read(buffer))!=-1){ bos.write(buffer,0,len); // bos.flush();//刷新缓存区 } } catch (IOException e) { e.printStackTrace(); } finally { //4.资源关闭 //要求:关闭外层的流,再关闭内层的流。类比,脱衣服 if(bos!=null) try { bos.close(); } catch (IOException e) { e.printStackTrace(); } if(bis!=null) try { bis.close(); } catch (IOException e) { e.printStackTrace(); } //说明:关闭外层流的同时,内层流也会自动的进行关闭。关于内层流的关闭,我们可以省略。 // fos.close(); // fis.close(); } } //实现文件复制的方法 public void copyFileWithBuffered(String srcPath,String destPath){ FileInputStream fis= null; FileOutputStream fos= null; BufferedInputStream bis= null; BufferedOutputStream bos= null; try { //1、造文件 File srcFile=new File(srcPath); File destFile=new File(destPath); //2、造流 //2.1造文件流 fis = new FileInputStream(srcFile); fos = new FileOutputStream(destFile); //2.2造缓冲流 bis = new BufferedInputStream(fis); bos = new BufferedOutputStream(fos); //3.复制的细节:读写 byte[] buffer=new byte[1024]; int len; while((len=bis.read(buffer))!=-1){ bos.write(buffer,0,len); } } catch (IOException e) { e.printStackTrace(); } finally { //4.资源关闭 //要求:关闭外层的流,再关闭内层的流。类比,脱衣服 if(bos!=null) try { bos.close(); } catch (IOException e) { e.printStackTrace(); } if(bis!=null) try { bis.close(); } catch (IOException e) { e.printStackTrace(); } } } @Test public void testCopyFileWithBuffered(){ long start =System.currentTimeMillis(); String srcPath="hello.txt"; String destPath="hello3.txt"; copyFileWithBuffered(srcPath,destPath); long end =System.currentTimeMillis(); System.out.println("复制操作花费时间为:"+(end-start)); } //使用testBufferReader和BufferWriter实现文本文件的复制 @Test public void testBufferReaderBufferWriter(){ //创建文件和相应的流 BufferedReader br= null; BufferedWriter bw= null; try { br = new BufferedReader(new FileReader(new File("hello.txt"))); bw = new BufferedWriter(new FileWriter(new File("hello4.txt"))); //读写操作 //方式一:使用char[]数组 // char [] cbuf=new char[1024]; // int len; // while((len=br.read(cbuf))!=-1){ // bw.write(cbuf,0,len); // // bw.flush(); // } //方式一:使用String String data; while((data=br.readLine())!=null){ //方法一: // bw.write(data+"\n");//data中不包含换行符 //方法二: bw.write(data);//data中不包含换行符 bw.newLine(); } } catch (IOException e) { e.printStackTrace(); } finally { //关闭资源 if(bw!=null) try { bw.close(); } catch (IOException e) { e.printStackTrace(); } if(br!=null) try { br.close(); } catch (IOException e) { e.printStackTrace(); } } } }