IO流-读取写入缓冲区

时间:2022-06-18 16:03:20

例如FileReader和FileWriter在读取的时候是读一次或者写一次就请求磁盘,这样使用的时间非常的长,效率比较低,因此引入BufferedReader和BufferedWriter作为读取和写入的缓存区.

1、BufferedReader一次读取8K的字符流到内存中,当程序读取字符时会先到BufferedReader中读取,若没有的话BufferedReader再从磁盘中读取,一次又是8k

2、BufferedWriter作为写入缓存区,要写入文件的字符流写入BufferedWriter(内存中),当刷新或关闭BufferedWriter时,才写入磁盘,减少磁盘的写入次数,提高效率

此二者使用时,首先要有流对象,一下代码举例:

import java.io.*;

class Test
{
    public static void main(String[] args)
    {
        try
        {
            copy("c:\\log.txt", "d:\\testlog.txt");
        }
        catch(IOException e)
        {
            e.printStackTrace();
            System.out.println("IO异常");
        }
    }
    
    public static void copy(String sourcePath, String destPath)throws IOException 
    {
        //创建读取和写入缓冲区
        BufferedReader bufferedReader = new BufferedReader(new FileReader(sourcePath));
        BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(destPath, true));
        
        //用以存放bufferedReader读取出来的一行
        String readerCache = null; 
        
        //当BufferedReader读取一行时是以换行符为判断,但不会读取换行符
        while((readerCache = bufferedReader.readLine()) != null)
        {
            bufferedWriter.write(readerCache);
            bufferedWriter.newLine(); //写入一个换行符
            bufferedWriter.flush(); //刷新写入文件
        }

        //当缓冲区关闭的时候流资源随之关闭
     //注意在关闭资源的时候要注意判断,若没有创建成功,本来就是null,关闭的时候会发生异常,增强代码的健壮性
     if(bufferedReader != null)   bufferedReader.close();
     if(bufferedWriter != null)   bufferedWriter.close(); } }