BufferedInputStream和BufferedOutputStream
过滤流,需要使用已经存在的节点流来构造,提供带缓冲的读写,提高了读写的效率。BufferedInputStream派生自java.io.FilterInputStream,并不是InputStream。在后面将看到BufferedReader派生自Reader,而不是派生自FilterReader,这个可能是SUN公司在设计上的一个小bug吧!BufferedOutputStream的构造函数有BufferedOutputStream(OutputStream out),之所以说它需要一个已经存在的输入节点流,就是因为构造函数的参数类型是OutputStream,然而FileOutputStream派生自OutputStream。所以可以把FileOutputStream类型的对象放进去。
BufferedOutputStream
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
import java.io.*;
public class StreamTest {
public static void main(String[] args) throws IOException {
String path = System.getProperty("user.dir") + File.separator + "temp.txt";
File file = new File(path);
OutputStream os = new FileOutputStream(file);
OutputStream bufferedOutputStream = new BufferedOutputStream(os);
bufferedOutputStream.write("BufferedOutputStream".getBytes());
bufferedOutputStream.flush();
bufferedOutputStream.close();
InputStream is = new FileInputStream(file);
InputStream bufferedInputStream = new BufferedInputStream(is);
byte[] buf = new byte[1024];
int len = bufferedInputStream.read(buf);// 将读到的字节放在字节数组中
int off = 0;// 从什么地方开始读取
String str = new String(buf, off, len);
System.out.println(str.toUpperCase());
bufferedInputStream.close();
}
}
只需要将过滤流关闭就可以了。
遵从先打开的后关闭也可以。