zoukankan      html  css  js  c++  java
  • Java IO 缓存流


    字节流和字符流每次读写都会访问硬盘,当读写频率增加其访问效率不高
    而使用缓存流读取时会将大量数据先读取到缓存中,以后每次读取先访问缓存,直到缓存读取完毕再到硬盘读取,缓存流写入数据也是一样,先将数据写入到缓存区,直到缓存区达到一定的量,才把这些数据一起写道硬盘中去,这样减少了IO操作。


    使用缓存流读数据

    缓存字符输入流 BufferedReader 可以一次读取一行数据

    package JavaIOTest;
    
    
    import java.io.*;
    
    public class BufferedIoTest {
        public static void main(String[] args) {
            File file = new File("d:/xyz/z/zzz/zzzz/textFile.txt");
            //创建基于文件对象的字符流
            //缓存流必须建立在一个存在的流的基础上
            try(
                    FileReader fileReader = new FileReader(file);
                    BufferedReader bufferedReader = new BufferedReader(fileReader);
                    )
            {
                while(true){
                    String line = bufferedReader.readLine();
                    if (null == line)
                        break;
                    System.out.println(linea);
                }
            }catch (IOException e){
                e.printStackTrace();
            }
        }
    }
    

    使用缓存流写数据

    PrintWriter 缓存字符输出流, 可以一次写出一行数据

    package JavaIOTest;
    
    import java.io.File;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.io.PrintWriter;
    
    public class PrintWriterTest {
        public static void main(String[] args) {
            File file = new File("d:/xyz/z/zzz/zzzz/textFile.txt");
            try(
                    FileWriter fileWriter = new FileWriter(file);
                    PrintWriter printWriter = new PrintWriter(fileWriter);
                    )
            {
                printWriter.println("清华大学");
                printWriter.println("北京大学");
            }catch (IOException e){
                e.printStackTrace();
            }
        }
    }
    

    flush

    有的时候,需要立即把数据写入到硬盘,而不是等缓存满了才写出去。 这时候就需要用到flush

    package JavaIOTest;
    
    import java.io.File;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.io.PrintWriter;
    
    public class PrintWriterTest {
        public static void main(String[] args) {
            File file = new File("d:/xyz/z/zzz/zzzz/textFile.txt");
            try(
                    FileWriter fileWriter = new FileWriter(file);
                    PrintWriter printWriter = new PrintWriter(fileWriter);
                    )
            {
                printWriter.println("清华大学");
                printWriter.flush();
                printWriter.println("北京大学");
                printWriter.flush();
            }catch (IOException e){
                e.printStackTrace();
            }
        }
    }
    

    练习:移除“//”形式的注释

    package JavaIOTest;
    
    import java.io.*;
    
    public class RemoveNotesTest {
        public static void main(String[] args) throws IOException {
            File file = new File("d:/xyz/z/zzz/zzzz/notes.class");
            removeNotes(file);
        }
        public static void removeNotes(File file) throws IOException{
            FileReader fileReader = new FileReader(file);
            BufferedReader bufferedReader = new BufferedReader(fileReader);
            StringBuilder stringBuilder = new StringBuilder();
            while (true){
                String line = bufferedReader.readLine();
                if(null == line){
                    break;
                }
                else if (!line.trim().startsWith("//")){
                    stringBuilder.append(line);
                    stringBuilder.append("
    ");
                }
            }
            FileWriter fileWriter = new FileWriter(file);
            fileWriter.write(stringBuilder.toString());
            fileWriter.close();
            bufferedReader.close();
            fileReader.close();
        }
    }
    
  • 相关阅读:
    7.31 "简单"(大嘘)DP
    P2014 选课
    7.30 "简单"(大嘘)DP
    Codeforce 1131C Birthday (构造数组)
    洛谷 P1074【靶形数独】(DFS)
    NOIP2004【虫食算】(DFS)
    洛谷 P1025【数的划分】(DFS dp)
    洛谷P1019【单词接龙】(DFS)
    洛谷P1162【机器人搬重物】(BFS)
    洛谷P1141【01迷宫】
  • 原文地址:https://www.cnblogs.com/PythonFCG/p/13860161.html
Copyright © 2011-2022 走看看