FilterInputStream与FilterOutputStream分别是InputStream与OutputStream的子类,Filter输入输出流本身只是简单覆写了基类的方法,没什么值得说的,但是它的子类Buffered流是有自己的特点的。
BufferedInputStream
BufferedInputStream能够为输入流提供缓冲区,提高IO速度。这样你可以一次读取一大块的数据,而不用从网络或是磁盘中一次一个字节的读取。特别是在读取大量的磁盘数据时,缓冲可以很大程度的提高IO速度。
将输入流包装到BufferedInputStream中,就可以为此输入流加上缓冲。
InputStream inputStream = new BufferedInputStream(new FileInputStream("D:\\test\\test.txt"));
通过构造函数,将FileInputStream包装到BufferedInputStream中,为输入流设置了缓冲区,默认大小为8192字节。也可以手动设置缓冲区大小。
InputStream inputStream = new BufferedInputStream(new FileInputStream("D:\\test\\test.txt"), 8 * 1024);
上述代码手动设置缓冲区大小为8KB。最好把缓冲区设置为1024字节的整数倍,这样可以更有效的利用内置缓冲区的磁盘。
除了可以为输入流设置缓冲区外,BufferedInputStream基本与InputStream类似。
BufferedOutputStream
与BufferedInputStream类似,BufferedOutputStream可以为输出流提供缓冲区。
OutputStream outputStream = new BufferedOutputStream(new FileOutputStream("D:\\test\\test01.txt"));
缓冲区默认大小也为8192字节。也可以手动设置缓冲区大小。
OutputStream outputStream = new BufferedOutputStream(new FileOutputStream("D:\\test\\test01.txt"), 8 * 1024);
同样建议把缓冲区大小设置成1024的整数倍。
除了能够为输出流提供缓冲区以外,其余方面BufferedOutputStream基本与OutputStream类似。唯一不同的时,你需要手动flush()方法确保写入到此输出流的数据真正写入到磁盘或者网络中。
BufferedReader
BufferedReader功能与BufferedInputStream类似,都可以为输入流增加缓冲区,只不过一个针对字节流,一个针对字符流。
把Reader包装到BufferedReader中,就可以为Reader添加缓冲区。缓冲区默认大小为8192字节。
Reader reader = new BufferedReader(new FileReader("D:\\test\\test.txt"));
也可以通过在构造函数中传递参数,手动定义缓冲区大小。
Reader reader = new BufferedReader(new FileReader("D:\\test\\test.txt"), 8 * 1024);
最好把缓冲区大小设置成1024字节的整数倍,这样能更高效地利用内置缓冲区的磁盘。
BufferedReader还有一个额外readLine()方法,可以方便地一次性读取一整行字符。
BufferedWriter
与BufferedReader类似,BufferedWriter可以为输出流提供缓冲区。可以构造一个使用默认大小缓冲区的BufferedWriter,默认大小为8192字节。
Writer writer = new BufferedWriter(new FileWriter("D:\\test\\test01.txt"));
也可以通过在构造函数中传递参数,手动定义缓冲区大小。
Writer writer = new BufferedWriter(new FileWriter("D:\\test\\test01.txt"), 8 * 1024);
类似地,BufferedWriter也提供了writeLine()方法,能够把一行字符写入到底层的字符输出流中。
值得注意是,你需要手动flush()方法确保写入到此输出流的数据真正写入到磁盘或者网络中。