Java IO流 处理流--缓冲流(Buffering)

Posted Z && Y

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java IO流 处理流--缓冲流(Buffering)相关的知识,希望对你有一定的参考价值。

1. 缓冲流(Buffering)

缓冲流要”套接“在相应的节点流之上,对读写的数据提供了缓冲的功能,提高了读写的效率,同时增加了一些新的方法。Java提供了四种缓冲流,常用构造方法如下:

  • 缓冲输入流支持其父类的mark和reset方法。
  • BufferedReader提供了readLine方法用于读取一行字符串
  • BufferedWriter提供了newLine用于写入一个行分隔符
  • 对于输出的缓冲流,写出的数据会现在内存中缓存,使用flush方法将会使内存中的数据立刻写出
  • 带有缓冲区的,缓冲区(Buffer)就是内存里面的一小块区域,读写数据时都是先把数据放到这块缓冲区域里面,减少io对硬盘的访问次数,保护我们的硬盘。可以把缓冲区想象成一个小桶,把要读写的数据想象成水,每次读取数据或者是写入数据之前,都是先把数据装到这个桶里面,装满了以后再做处理。这就是所谓的缓冲。先把数据放置到缓冲区上,等到缓冲区满了以后,再一次把缓冲区里面的数据写入到硬盘上或者读取出来,这样可以有效地减少对硬盘的访问次数,有利于保护我们的硬盘。

1.1【缓冲流测试代码:BufferedInputStream】

read.txt

TestBufferStream.java

public class TestBufferStream {
    public static void main(String[] args) {
        FileInputStream fis = null;
        try {
            // 在FileInputStream节点流的外面套接一层处理流BufferedInputStream
            fis = new FileInputStream("E:\\\\IDEACode\\\\ketangpai\\\\file-test\\\\src\\\\character1\\\\resource\\\\read.txt");
            int c = 0;
            for (int i = 0; (c = fis.read()) != -1; i++) {
                // 注意这里需要强转为字符 否则输出的是字符的ASCII码
                System.out.print((char) c);
            }
            fis.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}


1.2【演示:BufferedReader】

TestBufferStream.java

/*使用FileWriter(字符流)向指定文件中写入数据写入数据时以1个字符为单位进行写入*/
public class TestBufferStream {
    public static void main(String[] args) {
        try {
            //在节点流FileWriter的外面再套一层处理流BufferedWriter
            BufferedWriter bw = new BufferedWriter(new FileWriter("E:\\\\IDEACode\\\\ketangpai\\\\file-test\\\\src\\\\character1\\\\resource\\\\write.txt"));
            String s = null;
            for (int i = 0; i < 100; i++) {
                /*
                “Math.random()”将会生成一 系列介于0~1之间的随机数。
                static String valueOf(double d)这个valueOf()方法的作用就是把 一个double类型的数转换成字符串
                valueOf()是一个静态方法,所以可以使用“类型.静态方法名”的形式来调用
                 */
                s = String.valueOf(Math.random());
                bw.write(s);//把随机数字符串写入到指定文件中
                bw.newLine();//调用newLine()方法使得每写入一个随机数就换行显示
            }
            bw.flush();//调用flush()方法清空缓冲区
            //在节点流FileReader的外面再套一层处理流BufferedReader
            BufferedReader br = new BufferedReader(new FileReader("E:\\\\IDEACode\\\\ketangpai\\\\file-test\\\\src\\\\character1\\\\resource\\\\write.txt"));
            while ((s = br.readLine()) != null) {
                /*
                使用BufferedReader处理流里面提供String readLine()方法读取文件中 的数据时是一行一行读取的
                循环结束的条件就是使用readLine()方法读取数据返回的字符串为空值后则表 示已经读取到文件的末尾了。
                 */
                System.out.println(s);
            }
            bw.close();
            br.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}


write.txt


1.3 处理流–缓冲流(Buffering)分析:

小结:

程序的输入指的是把从文件读取到的内容存储到为程序分配的内存区域里面去。流,什么是流,流无非就是两根管道,一根向里,一根向外,向里向外都是对于我们自己写的程序来说,流分为各种各样的类型,不同的分类方式又可以分为不同的类型,根据方向来分,分为输入流和输出流,根据读取数据的单位的不同,又可以分为字符流和字节流,除此之外,还可以分为节点流和处理流,节点流就是直接和数据源连接的流,处理流就是包在其它流上面的流,处理流不是直接和数据源连接,而是从数据源读取到数据以后再通过处理流处理一遍。缓冲流也包含了四个类:BufferedInputStream、BufferedOutputStream、BufferedReader和BufferedWriter。流都是成对的,没有流是是不成对的,肯定是一个in,一个out。



以上是关于Java IO流 处理流--缓冲流(Buffering)的主要内容,如果未能解决你的问题,请参考以下文章

Java核心类库-IO-包装流概述和缓冲流原理

Java IO流详解——缓冲流

Java IO流--使用缓冲流实现非文本文件和文本文件的复制

java IO流 缓冲流的使用

java _io_字节缓冲流(装饰器)输入输出

Java IO流