缓冲流的了解

缓冲流:

BufferedInputStream

BufferedOutputStream

BufferedReader

BufferedWriter

 

是包装流(处理流)的一种,它依赖于原始的输入输出流, 它令输入输出流具有1个缓冲区, 显著减少与外部设备的IO次数, 提高输入输出的效率,而且提供一些额外的方法

缓冲区就是专门用于传递数据的一块内存。当写入数据时,程序将数据发往缓冲区,缓冲区满,系统再将数据发往相应的设备;当读取数据时,程序重缓冲区读取,缓冲区若空,系统将从相应的设备读取数据。

作用:提高了内存与外部设备之间的数据传输效率。

 

字节缓冲流:

BufferedInputStream:

public class BufferedInputStreamTest01 {
    public static void main(String[] args) {
        BufferedInputStream bis = null;
        //BufferedInputStream流的构造方法,要传一个是InputStream的节点流
        /* public BufferedInputStream(InputStream in) {
            this(in, DEFAULT_BUFFER_SIZE);
        }*/
        //FileInputStream extends InputStream
        //FileInputStream is a InputStream
        /*
        包装流:BufferedInputStream
        节点流:FileInputStream
         */
        try {
            //read()方法,读取文件单个字节数据
            bis = new BufferedInputStream(new FileInputStream("D:\\java\\temp02.txt"));
            System.out.println(bis.available());
            System.out.println(bis.read());

            //循环read()方法,读取文件全部数据
            //循环多次,每次获取一个字节
            bis = new BufferedInputStream(new FileInputStream("D:\\java\\temp02.txt"));
            int readData = 0;
            while ((readData = bis.read()) != -1){
                System.out.print(readData+" ");
            }

            //read(bytes)方法,把获取到的数据放到字节数组中,一次获取的长度是bytes.字节
            //循环多次,每次获取多个字节,完成文件的全部读取
            System.out.println();
            bis = new BufferedInputStream(new FileInputStream("D:\\java\\temp02.txt"));
            byte[] bytes = new byte[1024];
            int readCount = 0;
            while ((readCount = bis.read(bytes)) != -1){
                System.out.print(new String(bytes,0,readCount));
            }

            //available()方法获取文件的剩余未读的字节数readCount
            //设置字节数组的长度为readCount,一次把文件中未读的数据,读取出来,放到字节数组中
            //一次读取,没有循环
            System.out.println();
            bis = new BufferedInputStream(new FileInputStream("D:\\java\\temp02.txt"));
            readCount = bis.available();
            bytes = new byte[readCount];
            bis.read(bytes);
            System.out.print(new String(bytes,0,readCount));

            //跳过3个字节不输出
            System.out.println();
            bis = new BufferedInputStream(new FileInputStream("D:\\java\\temp02.txt"));
            bis.skip(3);
            readCount = bis.available();
            bytes = new byte[readCount];
            bis.read(bytes);
            System.out.print(new String(bytes,0,readCount));


        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if (bis != null){
                try {
                    bis.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

BufferedOutputStream:

public class BufferedOutputStreamTest01 {
    public static void main(String[] args) {
        BufferedOutputStream bos= null;
        try {

            //单独写一个字符a到文件中,覆盖原来的数据
            bos = new BufferedOutputStream(new FileOutputStream("D:\\java\\temp02.txt"));
            bos.write(97);

            //写一个字节数组,把字节数组的内容写到文件中(以追加的形式),这边会覆盖原来的97
            bos = new BufferedOutputStream(new FileOutputStream("D:\\java\\temp02.txt",true));
            byte[] bytes = new byte[]{98,99,100};
            bos.write(bytes);

            //指定字节数组中的字节写到文件中
            bos.write(bytes,0,1);

            //刷新
            bos.flush();


        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if (bos != null){
                try {
                    bos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

字符缓冲流:

BufferedReader:

public class BufferedReaderTest01 {
    public static void main(String[] args) {
        BufferedReader br = null;
        try {
            //节点流:FileReader
            //包装流:BufferedReader
            FileReader reader = new FileReader("..\\..\\java\\temp.txt");
            //读第一行
            br = new BufferedReader(reader);
            String s = br.readLine();
            System.out.println(s);

            //读第二行
            String s1 = br.readLine();
            System.out.println(s1);

            //循环读,每次读一行。没有值得行,返回空
            br = new BufferedReader(new FileReader("..\\..\\java\\temp.txt"));
            s = null;
            while ((s = br.readLine()) != null){
                //读出来,不带换行符
                System.out.println(s);
            }

        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if (br != null){
                try {
                    br.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

    }
}

BufferedWriter :

public class BufferedWriterTest01 {
    public static void main(String[] args) {
        FileWriter in = null;
        BufferedWriter writer = null;
        try {
            //覆盖写入
            in = new FileWriter("..\\..\\java\\writer.txt");
            writer = new BufferedWriter(in);
            writer.write("BufferedWriter流123");
            writer.flush();

            //追加写入
            in = new FileWriter("..\\..\\java\\writer.txt",true);
            writer = new BufferedWriter(in);
            writer.write("\n");
            writer.write("BufferedWriter流456");
            writer.flush();

            //字符数组写入
            char[] chars = "BufferedWriter流789".toCharArray();
            writer.write(10);//10是回车
            writer.write(chars);

            writer.write(10);
            writer.write(chars,14,1);//流

            //字符串写入
            writer.write(10);//10是回车
            writer.write("BufferedWriter流abc");

            writer.write(10);
            writer.write("abcdef",0,3);
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if(writer != null){
                try {
                    writer.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值