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

猜你喜欢

转载自www.cnblogs.com/huang-changfan/p/9880966.html
今日推荐