一、前言
- 本节简要介绍缓冲与过滤相关的Reader和Writer,主要涉及BufferedReader、BufferedWriter
二、具体流
2.1 BufferedReader
-
2.1.1
作用:BufferedReader能为字符输入流提供缓冲区,可以提高许多IO处理的速度 2.1.2
意义:- 你可以一次读取一大块的数据,而不需要每次从网络或者磁盘中一次读取一个字节。特别是在访问大量磁盘数据时,缓冲通常会让IO快上许多。
- 除了能够为输入流提供缓冲区以外,其余方面BufferedReader基本与Reader类似。BufferedReader还有一个额外
readLine()
方法,可以方便地一次性读取一整行字符。
-
2.1.3
附: 2.1.4
demo:Reader input = new BufferedReader(new FileReader("C:/data/input-file.txt")); /*也可以通过传递构造函数的第二个参数*/ Reader input = new BufferedReader(new FileReader("C:/data/input-file.txt", 10 * 1024)); String str = ""; while ((str = input.readline()) != null) {}
-
2.2 BufferedWrider
-
2.2.1
作用:为编写BufferedWriter的实例提供缓冲 -
2.2.2
意义:缓冲可以大大加快速度。缓冲器不是一次写一个字符到网络或磁盘,而是一次写一个更大的块。这通常要快得多,特别是对于磁盘访问和更大的数据量。 2.1.4
demo:int bufferSize = 8 * 1024; FileWriter fw = new FileWriter("data.bin"); try (BufferedWriter bw = new BufferedWriter(fw, bufferSize)){ //写入后不加换行符,writeline(String str)默认加上! bw.write("Hello World"); bw.flush(); //try() 语句帮我们省了写 bw.close(); 的功夫 }
- 附:BufferedWriter除了向输入流添加缓冲之外,缓冲器的行为与编写器(非包装流)非常相似。但是缓冲器添加了一个额外的方法:newline()方法,它可以向基础编写器写入一个新行字符。此外,如果您需要绝对确定写到现在为止的字符被从缓冲区中清除出来并放到网络或磁盘上,那么您可能需要调用 flush().
- FileWriter实例不是在try() 语句里 定义的,这是否意味着,try-with-resources 块将不会自动关闭这个文件输出流实例? 这在 我的另一篇文章 《IO流—序列化》中有同样的解释!
-
三、 与BufferedInputStream、BufferedOutoutStream的区别
主要区别:
操作对象不同:
-
BufferedReader
操作字符。只需要把Reader包装到BufferedReader中,就可以为Reader添加缓冲区(注:默认缓冲区大小为8192字节,即8KB) -
BufferedInputStream
操作原始字节。要把InputStream对象包装
-