zoukankan      html  css  js  c++  java
  • 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 DOM 06 节点关系
    HTML DOM 05 事件(三)
    HTML DOM 05 事件(二)
    HTML DOM 05 事件(一)
    html DOM 04 样式
    html DOM 03 节点的属性
    html DOM 02 获取节点
    html DOM 01 节点概念
    JavaScript 29 计时器
    JavaScript 28 弹出框
  • 原文地址:https://www.cnblogs.com/huang-changfan/p/9880966.html
Copyright © 2011-2022 走看看