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();
        }
    }
    
  • 相关阅读:
    函数指针
    动态内存
    char*和char[]的区别
    C语言基本数据类型大小
    html5新特性localStorage和sessionStorage
    Swoole实现h5版聊天室笔记
    php使用mysql之sql注入(功)
    Http协议工作特点和工作原理笔记
    原生js使用ajax
    php常用的几个预定义变量
  • 原文地址:https://www.cnblogs.com/PythonFCG/p/13860161.html
Copyright © 2011-2022 走看看