Java缓存流的用法(附带实例)
为了提高数据读写速度,Java API 提供了带缓存功能的流类,称为缓存流。
缓存流“套接”在相应的节点流之上。根据数据操作单位,可以把缓存流分为以下两种类型:
在创建流对象时,内部会创建一个缓存区数组[缺省使用 8192 字节(8KB)的缓存区],通过缓存区读写,减少系统输入输出次数,从而提高读写效率,如下图所示。

图 1 缓存流
Java 缓存流的构造方法如下:
【实例】创建缓存流对象,调用不同的构造方法,创建不同的缓存流对象,代码如下:
Java 缓存流的常用方法如下:
【实例】将文件 test.txt 复制到同一路径下,并更名为 newtest.txt,代码如下:
注意,在涉及嵌套的多个流时,如果都要显式关闭的话,就需要先关闭外层的流,再关闭内层的流。实际上,在开发中,只要关闭最外层的流即可,因为在关闭外层的流时,内层的流也会被关闭。
缓存流“套接”在相应的节点流之上。根据数据操作单位,可以把缓存流分为以下两种类型:
- 字节缓存流:BufferedInputStream、BufferedOutputStream;
- 字符缓存流:BufferedReader、BufferedWriter。
在创建流对象时,内部会创建一个缓存区数组[缺省使用 8192 字节(8KB)的缓存区],通过缓存区读写,减少系统输入输出次数,从而提高读写效率,如下图所示。

图 1 缓存流
Java 缓存流的构造方法如下:
- public BufferedInputStream(InputStream in):创建一个新的字节型缓存输入流;
- public BufferedOutputStream(OutputStream out):创建一个新的字节型缓存输出流;
- public BufferedReader(Reader in):创建一个新的字符型缓存输入流;
- public BufferedWriter(Writer out):创建一个新的字符型缓存输出流。
【实例】创建缓存流对象,调用不同的构造方法,创建不同的缓存流对象,代码如下:
import java.io.*;
public class BufferedInputStreamDemo {
public static void main(String[] args) throws Exception {
// 创建 FileInputStream 对象
FileInputStream fileInputStream = new FileInputStream(new File("a.txt"));
// 缓存流 BufferedInputStream 的参数需要的是 FileInputStream 对象
BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream);
// 创建 FileOutputStream 对象
FileOutputStream fileOutputStream = new FileOutputStream("c.txt");
// 缓存流 BufferedOutputStream 的参数需要的是 FileOutputStream 对象
BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(fileOutputStream);
FileReader fileReader = new FileReader("a.txt");
BufferedReader bufferedReader = new BufferedReader(fileReader);
FileWriter fileWriter = new FileWriter("c.txt");
BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);
}
}
在上述代码中,我们创建了字节流的缓存流与字符流的缓存流,二者均属于处理流的范畴。通过调用不同的构造方法,我们能够创建出各具特色的缓存流,以满足不同的数据处理需求。Java 缓存流的常用方法如下:
- [BufferedReader] public String readLine():读一行文字。
- [BufferedWriter] public void newLine():写一行分隔符,由系统属性定义符号。
【实例】将文件 test.txt 复制到同一路径下,并更名为 newtest.txt,代码如下:
import java.io.*;
/**
* 复制 test.txt 文件,复制到同一个路径下,重命名为 newtest.txt 文件
*/
public class BufferedReadWriterDemo {
public static void main(String[] args) {
FileReader fileReader = null;
FileWriter fileWriter = null;
BufferedReader bufferedReader = null;
BufferedWriter bufferedWriter = null;
try {
fileReader = new FileReader("test.txt");
fileWriter = new FileWriter("newtest.txt");
bufferedReader = new BufferedReader(fileReader);
bufferedWriter = new BufferedWriter(fileWriter);
String line = null;
while ((line = bufferedReader.readLine()) != null) {
bufferedWriter.write(line);
bufferedWriter.newLine();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
// 先关闭后开的
bufferedWriter.close();
bufferedReader.close();
fileWriter.close();
fileReader.close();
} catch (IOException io) {
io.printStackTrace();
}
}
}
}
在上述代码中,采用缓存流通过逐行读取和写入文件来实现对数据的处理,将 test.txt 文件复制到同一路径下,并将其重命名为 newtest.txt。注意,在涉及嵌套的多个流时,如果都要显式关闭的话,就需要先关闭外层的流,再关闭内层的流。实际上,在开发中,只要关闭最外层的流即可,因为在关闭外层的流时,内层的流也会被关闭。
ICP备案:
公安联网备案: