带缓存的字符输入输出流

   缓存可以说是I/O的一种性能优化。缓存流为I/O流增加了内存缓存区。有了缓存区,使得在流上执行skip()mark()和reset()方法都成为可能。

大纲:

BufferedReader类与BufferWriter类

BufferedReader类与BufferWriter类分别继承了Reader类与Writer类。这两个类同样具有内部缓存机制,并可以行为单位行为单位进行输入、输出。

根据BufferedReader类的特点,可总结出字符数据读取文件的过程:字符数据==》BuffereaWriter==》OutoutStreamWriter==》OutoutStream==》文件。

BufferedReader类常用的方法如下:

read()方法:读取单个字符。

readLine()方法:读取一个文本行,并将其返回为字符串,若无数据可读,则返回null。

write(String s,int off,int len)方法:写入字符串的某一部分。

flush()方法:刷新该流程的缓存。

newLine()方法:写入一个行分割符。

在使用BufferedWriter类的Write()方法时,数据并没有直接被写入到输出流中,而是首先进入缓存区中,如果想立刻将缓存区的数据写入输出流中,一定要调用flush()方法。

import java.io.*;

public class TestFile4 {

    public static void main(String[] args) {
        
        
        try 
        {
            File f=new File("d:\test.txt");
        
            //带缓存
            //Writer接口的实现类
            FileWriter fw=new FileWriter(f,true);
            
            //缓存写入类,构造时需要传入Writer实例
            BufferedWriter bw=new BufferedWriter(fw);
        
            bw.write("
这是缓存方式写入的字符串");
        
            //自动管理缓存
            //自动写入:1.缓存满了 2.缓存关闭之前
            
            bw.flush();//主动清空缓存,写入数据
            
            bw.write("
这是清空后缓存方式写入的字符串");
            
            bw.close();
            fw.close();
            
            System.out.println("写入完成");
            
            //缓存读
            
            FileReader fr=new FileReader(f);
            
            BufferedReader br=new BufferedReader(fr);
            
            
            //第一次读
//            String str=br.readLine();
//            
//            System.out.println(str);
//            
//            while(str!=null)
//            {
//                System.out.println(str);
//                
//                str=br.readLine();
//            }
            
            while(true)
            {
                String str=br.readLine();
                
                if(str==null)
                {
                    break;
                }
                System.out.println(str);
            }
            
            
            
            
        }
        catch (IOException e)
        {
            // TODO 自动生成的 catch 块
            e.printStackTrace();
        }
        
        

    }

}
View Code

原文地址:https://www.cnblogs.com/panyiquan/p/5281452.html