• 6.3(java学习笔记)缓冲流


    一、缓冲流

      使用缓冲流后的输入输出流会先存储到缓冲区,等缓冲区满后一次性将缓冲区中的数据写入或取出。

      避免程序频繁的和文件直接操作,这样操作有利于提高读写效率。

      缓冲流是构建在输入输出流之上的,可以理解为是对基本输入输出流的增强和扩展,但其根本是建立在输入输出流之上的。

      1.字节缓冲流

        1.1字节缓冲流类

          BufferInputStream

          BufferOutputStream

        1.2.构造方法:

          传递参数为输入、输出流对象。

          BufferedInputStream(InputStream in)//构造方法,创建一个缓冲流,保存其参数(输入流),供后续使用

          BufferedInputStream(InputStream in, int size)//创建一个缓冲流,size为设置缓冲区大小

        

          BufferedOutputStream(OutputStream out)//创建输出缓冲流

          BufferedOutputStream(OutputStream out, int size)//size为缓冲区大小

        1.3.例子

          给输入输出流加上缓冲流后,其基本功能和方法并没有改变,只是改变了读写所采取的策略,基本方法和操作方式没有发生变化。

        

    import java.io.BufferedInputStream;
    import java.io.BufferedOutputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.io.Flushable;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.io.Reader;
    import java.io.Writer;
    
    public class Test {
        public static void main(String[] args){
            String pathW = "F:\依风\Desktop\writer.txt";
            String pathR = "F:\依风\Desktop\reader.txt";//此处的reader.txt中要有数据
            
            File fr = new File(pathR);
            File fw = new File(pathW);
            InputStream r = null;
            OutputStream w = null;
            InputStream bufferR = null;
            OutputStream bufferW = null;
            try {
                int c = 0;
                r = new FileInputStream(fr);
                w = new FileOutputStream(fw);
                bufferR = new BufferedInputStream(r);//将输入输出流加上缓冲
                bufferW = new BufferedOutputStream(w);
                try {
                    while(-1 != (c = bufferR.read())){//读一个字符
                        bufferW.write(c);
                        System.out.print((char)c);
                    }
                    bufferW.flush();//将缓冲区剩余数据写入
                    
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }finally{
                try {
                    bufferW.close();//关闭资源
                    bufferR.close();
                    r.close();
                    w.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                
            }
        }
    }
    运行结果:
    BufferedStream

      2.字符缓冲流

        2.1字符缓冲流类

          BufferedWriter

            BufferedReader

        2.2构造方法

          BufferedWriter(Writer out)

          BufferedWriter(Writer out, int sz)

          创建字符缓冲流,sz为指定缓冲区大小。

           

          BufferedReader(Reader in)

          BufferedReader(Reader in, int sz)

        2.3新增方法

          BufferedWtriter:void newLine()//写入行分隔符,简单的说就是加上回车换行

          BufferedReader:String readLine()//读取一行,以字符串形式返回读取内容。如果已到末尾返回null

          有一点需要注意,这里的新增方法在它们的父类(Wtriter,Reader)中并没有,所以需要使用这些方法时不能发生多态。

        

        3.4例子

          

    import java.io.BufferedInputStream;
    import java.io.BufferedOutputStream;
    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.io.Flushable;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.io.Reader;
    import java.io.Writer;
    
    public class Test {
        public static void main(String[] args){
            String pathW = "F:\依风\Desktop\writer.txt";
            String pathR = "F:\依风\Desktop\reader.txt";//该文件必须已有数据
            /*此时该文件中的数据:
             *BufferedStream
             *BufferReader
             *BufferWriter
             * 
             */
            
            File fr = new File(pathR);
            File fw = new File(pathW);
            Reader r = null;
            Writer w = null;
            BufferedReader bufferR = null;//此处使用的BufferedReader、BufferedWtriter中独有的方法
            BufferedWriter bufferW = null;//故不能发生多态,所有不能使用Reader或Writer
            try {
                String str;
                r = new FileReader(fr);
                w = new FileWriter(fw);
                bufferR = new BufferedReader(r);//将输入输出流加上缓冲
                bufferW = new BufferedWriter(w);
                try {
                    while(null != (str = bufferR.readLine())){//读一行
                        bufferW.write(str);//将读取的字符串写入
                        bufferW.newLine();//写入换行分隔符,即回车
                        System.out.println(str);//输出读取和写入的数据
                    }
                    bufferW.flush();//将缓冲区剩余数据写入
                    
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }finally{
                try {
                    bufferW.close();//关闭资源
                    bufferR.close();
                    r.close();
                    w.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                
            }
        }
    }
    运行结果:
    BufferedStream
    BufferReader
    BufferWriter
  • 相关阅读:
    HTML_常用标签
    介绍Html_前端
    Mysql(2)数据类型与约束
    Mysql命令
    python_高级进阶(5)协程_事件
    python_高级进阶(4)同步_异步_回调函数_阻塞
    数据类型的补充以及各类型之间的相互转换
    二次编码
    坑坑坑坑坑坑----列表
    字典
  • 原文地址:https://www.cnblogs.com/huang-changfan/p/9880966.html
Copyright © 2020-2023  润新知