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。
注意,在涉及嵌套的多个流时,如果都要显式关闭的话,就需要先关闭外层的流,再关闭内层的流。实际上,在开发中,只要关闭最外层的流即可,因为在关闭外层的流时,内层的流也会被关闭。