一.字符流的缓冲区
1.什么是缓冲区
缓冲区又称为缓存,它是内存空间的一部分。也就是说,在内存空间中预留了一定的存储空间,这些存储空间用来缓冲输入或输出的数据,
这部分预留的空间就叫做缓冲区。缓冲区根据其对应的是输入设备还是输出设备,分为输入缓冲区和输出缓冲区。
2.为什么要引入缓冲区
缓冲区就是一块内存区,它用在输入输出设备和CPU之间,用来缓存数据。是为了减少系统调用,使其能够高效率工作。
3.字符流的缓冲
3.1 BufferWriter实例
1 import java.io.*; 2 3 //使用BufferedWriter缓冲区对象来读取数据 4 public class BufferedWriterDemo { 5 6 public static void main(String[] args) throws IOException{ 7 //新建一个文件流来存储数据,并传递给BufferedWriter对象 8 FileWriter fw =new FileWriter("BuffWriter_copy.txt"); 9 //新建缓冲区对象并将文件流对象传递给其构造函数 10 BufferedWriter bufw=new BufferedWriter(fw); 11 //往缓冲区中写数据 12 for(int i=0;i<10;i++){ 13 14 bufw.write("abcde"+i); 15 16 bufw.newLine(); 17 //将内存中的数据刷新到文件中 18 bufw.flush(); 19 } 20 //关闭缓冲区 21 bufw.close(); 22 } 23 24 }
运行结果
3.2 BufferedReader实例
import java.io.*; /* * 建立BufferedReader缓冲区,使用newLine和readLine方法 */ public class BUfferedReaderDemo { public static void main(String[] args) throws IOException { //新建文件流,并将数据传递给缓冲区构造函数 FileReader fr = new FileReader("test.txt") ; //新建缓冲区,调用其构造函数 BufferedReader bufr = new BufferedReader(fr); //将数据打印 //因为BufferedReader返回的最后数据为String,如果到了最后则为null String line=null; //调用BufferedReader的readLine方法 while((line=bufr.readLine())!=null){ System.out.println(line); } } }
运行结果
二.综合实例
利用字符缓冲区来将一个文件内容复制到另一文件中
import java.io.*; /* * 利用字符缓冲区来将一个文件内容复制到另一文件中 */ public class BufferWriterDemo { public static void main(String[] args) { //创建一个缓冲区写对象,并初始化为null BufferedWriter bufw=null; //创建一个缓冲区读对象,并初始化为null BufferedReader bufr=null; try{ //缓冲区的构造函数必须 有一个参数 //新建一个写文件的流并传递给缓冲区写对象的构造函数 bufw=new BufferedWriter(new FileWriter("buffer_copy.txt")); //新建一个读文件的流并传递给缓冲区读对象的构造函数 bufr=new BufferedReader(new FileReader("FileRead.java")); //缓冲区返回一个String值,当缓冲区中没有数据是值为null String line=null; //缓冲区写对象有一个readLine函数,用来按行读取数据 while((line=bufr.readLine())!=null){ //缓冲区写对象也有write函数 bufw.write(line); //newLine将读到的数据换行,也就是按原来数据格式一致来存储 bufw.newLine(); //刷新数据到文件中 bufw.flush(); } } catch(IOException e){ throw new RuntimeException("读写错误"); } finally{ try{ if(bufw!=null){ bufw.close(); } } catch(IOException e){ throw new RuntimeException("写错误"); } try{ if(bufr!=null){ bufr.close(); } } catch(IOException e){ throw new RuntimeException("读错误"); } } } }
运行结果