Java复习之IO缓冲流

这篇博客主要是复习一下Java中的IO缓冲流。

1.缓冲流概述

首先要明确一个概念:
对文件或其它目标频繁的读写操作,效率差,性能低

使用缓冲流的好处是,能更高效的读写信息,原理是将数据先缓冲起来,然后一起写入或者读取出来,其实就是在其它流的基础上加上的缓冲功能

2.BufferedInputStream

public class BufferedInputStream
extends FilterInputSteam

BufferedInputStream为另一个输入流添加,会创建一个内部缓冲区数组,用于缓冲数据

    /**
     * 使用字节缓冲流进行读取操作
     */
    public static void input()
    {
        try {
            InputStream inputStream = new FileInputStream(
                    new File("H:"+File.separator+"第一种输出方式.txt"));
            //根据字节输入流构造一个字节缓冲流,默认的缓冲大小8K左右
            BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);
            //使用转换流
            Reader reader = new InputStreamReader(bufferedInputStream);
            char [] cs =new char[512];
            int len=-1;
            StringBuilder stringBuilder= new StringBuilder();
            while((len=reader.read(cs))!=-1)
            {
                stringBuilder.append(new String(cs,0,len));
            }
            System.out.println(stringBuilder);
            //关闭流
            reader.close();
            bufferedInputStream.close();
            inputStream.close();
        }catch (FileNotFoundException ex)
        {
            ex.printStackTrace();
        }catch (IOException ex)
        {
            ex.printStackTrace();
        }
    }

3.BufferedOutputStream

public class BufferedOutputStream
extends FilterOutputSteam

     /**
     * 使用字节缓冲流进行输出操作
     */
   public static void write()
    {
        try{
            OutputStream outputStream= new FileOutputStream(
                    new File("H:"+File.separator+"缓冲流输出.txt")
            );
            BufferedOutputStream  bufferedOutputStream =new BufferedOutputStream(outputStream);
            String info="山不在高,有仙则名";
            bufferedOutputStream.write(info.getBytes());
            //缓冲区的内容只有经过刷新或者关闭流文件才能真正
            //写到文件中去
            bufferedOutputStream.flush();
            bufferedOutputStream.close();
        }catch (FileNotFoundException ex)
        {
            ex.printStackTrace();
        }catch (IOException ex)
        {
            ex.printStackTrace();
        }
    }

在使用字节缓冲流进行输出操作时,最后别忘加调用flush()方法进行缓冲区的强制刷新或者是对流进行关闭,若缓冲区未满的话是不会自动写入到文件中去的,所以必须要强制刷新一下才是可以的

4.BufferedReader

public class BufferedReader
extends Reader

从字符输入流读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。可以指定缓冲区的大小,或者可以使用默认的大小。大多数情况下,默认值就足够大了

/**
     *根据字符输入流构造一个字符缓冲流
     */
    public static void reader()
    {
        try {
            Reader reader =new FileReader(
                    new File("H:"+File.separator+"字符缓冲流.txt")
            );
            BufferedReader bufferedReader= new BufferedReader(reader);
            char [] cs = new char[2];
            int len=-1;
            StringBuilder stringBuilder = new StringBuilder();
            while ((len=bufferedReader.read(cs))!=-1)
            {
                stringBuilder.append(new String(cs,0,len));
            }
            System.out.println(stringBuilder);
            //关闭流,这里没有flush方法
            bufferedReader.close();
        }catch (FileNotFoundException ex)
        {
            ex.printStackTrace();
        }catch (IOException ex)
        {
            ex.printStackTrace();
        }
    }

5.BufferedWriter

public class BufferedWriter
extends Writer

/**
     *使用缓冲流实现写入操作
     */
    public static void write()
    {
        try {
            Writer writer = new FileWriter(
                    new File("H:"+ File.separator+"字符缓冲流.txt")
            );
            //根据字符流构造一个字符缓冲流
            BufferedWriter bufferedWriter = new BufferedWriter(writer);
            bufferedWriter.write("爸爸去哪了");
            //输出的时候要进行刷新
            bufferedWriter.flush();

            bufferedWriter.close();
            writer.close();
        }catch (FileNotFoundException ex)
        {
            ex.printStackTrace();
        }catch (IOException ex)
        {
            ex.printStackTrace();
        }

    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值