zoukankan      html  css  js  c++  java
  • java基础:12.5 缓存流 BufferReader、 PrintWriter、flush

    1. Review

    上两节学过的字节流和字符流,其弊端是在每一次读写的时候,都会访问硬盘。 如果读写的频率比较高的时候,其性能表现不佳。

    为了解决以上弊端,采用缓存流。 缓存流在读取的时候,会一次性读较多的数据到缓存中,以后每一次的读取,都是在缓存中访问,直到缓存中的数据读取完毕,再到硬盘中读取

    缓存流在写入数据的时候,会先把数据写入到缓存区,直到缓存区达到一定的量,才把这些数据,一起写入到硬盘中去。按照这种操作模式,就不会像字节流,字符流那样每写一个字节都访问硬盘,从而减少了IO操作

    key word: BufferReaderPrintWriterflush
     
     

    2. BufferReader、 PrintWriter

    package stream;
      
    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.io.PrintWriter;
      
    public class Main {
      
        public static void main(String[] args) {
            
            File f1 = new File("f:/testfile/test.txt");
            // 创建文件字符流
            // 缓存流[必须]建立在一个存在的流的基础上
            try (
                    FileReader fr = new FileReader(f1);
                    BufferedReader br = new BufferedReader(fr);
                )
            {
                while (true) {
                    // 一次读一行
                    String line = br.readLine();
                    if (null == line)
                        break;
                    System.out.println(line);
                }
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            
            File f2 = new File("f:/testfile/file.txt");
            try (
            	FileWriter fw = new FileWriter(f2);
            	PrintWriter pw = new PrintWriter(fw);
            ){
            	pw.println("今天");
                pw.println("是一个");
                pw.println("好日子");
            }
            catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            }
      
        }
    }
    

     
     

    3. flush

    当操作要要立即把数据写入到硬盘,而不是等缓存满了才写出去时,适用flush
    把上一节的程序改写成

            File f2 = new File("f:/testfile/file.txt");
            try (
            	FileWriter fw = new FileWriter(f2);
            	PrintWriter pw = new PrintWriter(fw);
            ){
            	pw.println("今天");
            	pw.flush();
                pw.println("是一个");
                pw.flush();
                pw.println("好日子");
            }
            catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            }
    
  • 相关阅读:
    链表--判断一个链表是否为回文结构
    矩阵--“之”字形打印矩阵
    二叉树——平衡二叉树,二叉搜索树,完全二叉树
    链表--反转单向和双向链表
    codeforces 490C. Hacking Cypher 解题报告
    codeforces 490B.Queue 解题报告
    BestCoder19 1001.Alexandra and Prime Numbers(hdu 5108) 解题报告
    codeforces 488A. Giga Tower 解题报告
    codeforces 489C.Given Length and Sum of Digits... 解题报告
    codeforces 489B. BerSU Ball 解题报告
  • 原文地址:https://www.cnblogs.com/l20902/p/10610883.html
Copyright © 2011-2022 走看看