zoukankan      html  css  js  c++  java
  • 带缓存的字符输入输出流

       缓存可以说是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

  • 相关阅读:
    AC日记——色板游戏 洛谷 P1558
    AC日记——方差 洛谷 P1471
    AC日记——[Scoi2010]序列操作 bzoj 1858
    AC日记——Sagheer and Nubian Market codeforces 812c
    AC日记——Sagheer, the Hausmeister codeforces 812b
    AC日记——Sagheer and Crossroads codeforces 812a
    [BJOI2019]排兵布阵 DP
    多重背包二进制优化
    BZOJ 3211 花神游历各国 线段树
    「CQOI2006」简单题 线段树
  • 原文地址:https://www.cnblogs.com/panyiquan/p/5281452.html
Copyright © 2011-2022 走看看