带缓存的字符输入输出流

Posted 一全

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了带缓存的字符输入输出流相关的知识,希望对你有一定的参考价值。

   缓存可以说是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("\n这是缓存方式写入的字符串");
        
            //自动管理缓存
            //自动写入:1.缓存满了 2.缓存关闭之前
            
            bw.flush();//主动清空缓存,写入数据
            
            bw.write("\n这是清空后缓存方式写入的字符串");
            
            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

技术分享

技术分享

 

以上是关于带缓存的字符输入输出流的主要内容,如果未能解决你的问题,请参考以下文章

java缓冲字符字节输入输出流:java.io.BufferedReaderjava.io.BufferedWriterjava.io.BufferedInputStreamjava.io.(代码片段

68. 缓存输入输出字符流

字符流;字节流;带缓冲的输入输出流;以及用scanner读文件

I/O输入输出

Java 输入输出流

java.IO输入输出流:过滤流:buffer流和data流