java之IO系列04——带缓存的输入/输出流

缓存是I/O的一种性能优化。缓存流为I/O流增加了内存缓存区。有了缓存区,使得在流上执行skip()、mark()和reset()方法都成为可能。

目录

1、BufferedOutputStream类和BufferedInputStream类

1.1 BufferedInputStream

 1.2 BufferedOutputStream

2、BufferedReader与BufferedWriter类

3、案例


1、BufferedOutputStream类和BufferedInputStream类

1.1 BufferedInputStream

BufferedInputStream 是缓冲输入流。它继承于FilterInputStream。BufferedInputStream类可以对所有InputStream类进行带缓存区的包装以达到性能的优化。BufferedInputStream 的作用是为另一个输入流添加一些功能,例如,提供“缓冲功能”以及支持“mark()标记”和“reset()重置方法”。BufferedInputStream 本质上是通过一个内部缓冲区数组实现的。创建时,将创建一个内部缓冲区数组。当读取或跳过流中的字节时,根据需要从包含的输入流重新填充内部缓冲区,一次填充多个字节。该操作会记住输入流中的一个点,并且该操作会在从包含的输入中获取新字节之前,重新读取自最近一次操作以来读取的所有字节。

构造方法:

BufferedInputStream(InputStream in) //创建了一个带有32个字节的缓存流  
BufferedInputStream(InputStream in, int size) //创建一个具有指定大小的缓冲区  

从构造方法可以看出,BufferedInputStream对象位于InputStream类对象之前。字节数据读取文件的过程如图所示:

 1.2 BufferedOutputStream

 使用BufferedOutputStream输出信息和用OutputStream输出信息完全一样,只不过BufferedOutputStream有一个flush()方法用来将缓存区的数据强制输出完。flush()方法就是用于即使在缓存区没有满的情况下,也将缓存区的内容强制写入到外设,习惯上称这个过程为刷新。flush()方法只对使用缓存区的OutputStream类的子类有效。当调用close()方法时,系统在关闭流之前,也会将缓存区中的信息刷新到磁盘文件中。

构造方法:

BufferedOutputStream(OutputStream out) //创建一个新的缓冲输出流,将数据写入到指定的基本输出流中。  
BufferedOutputStream(OutputStream out, int size) //创建一个新的缓冲输出流,用指定的缓冲区大小写数据到指定的基本输出流中。 

2、BufferedReader与BufferedWriter类

BufferedReader类与BufferedWriter类分别继承Reader类与Writer类。这两个类同样具有内部缓存机制,并可以以行为单位进行输入/输出。

BufferedReader常用方法:

void close() //关闭流并释放与它相关联的任何系统资源。  
Stream lines() //返回一个 Stream,其中的元素是线从这 BufferedReader读。  
void mark(int readAheadLimit) //标记流中的当前位置。  
boolean markSupported() //判断是否流支持的mark()操作,即标记操作。  
int read() //读取单个字符。  
int read(char[] cbuf, int off, int len) //将字符读入一个数组的一部分。  
String readLine() //读一行文本。  
boolean ready() //告诉是否该流已准备好阅读。  
void reset() //将流到最近的标记。  
long skip(long n) //跳过的字符。  

BufferedWriter常用方法:

void close() //关闭流。  
void flush() //刷新流  
void newLine() //写行分隔符  
void write(char[] cbuf, int off, int len) //写入一个字符数组的一部分。  
void write(int c) //写一个字符。Write()方法时,数据并没有立刻被写入输出流,而是首先进入缓存区中。
//如果想立刻将缓存区中的数据写入输出流,一定要调用flush()方法。  
void write(String s, int off, int len) //写入字符串的一部分。 

3、案例

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class BufferedTest {
	public static void main(String[] args)
	{
		String song[] = {"太阳当空照,花儿对我笑,小鸟说早早早,你为什么背上了小书包"};
		File file = new File("E:/dir/o.txt");
		try {
			FileWriter fw = new FileWriter(file);
			BufferedWriter bufw = new BufferedWriter(fw);
			for(int i =0;i

 

你可能感兴趣的:(JAVA,java)