❤️ 个人主页: 水滴技术
🚀 支持水滴: 点赞👍 + 收藏⭐ + 留言💬
🌸 订阅专栏: Java 教程:从入门到精通
大家好,我是水滴~~
缓冲流是一个包装流,在创建缓冲流实例时,需要传入底层真实操作的输入或输出流。其主要的作用就是为了提高读写效率而生的。
今天讲的字符缓冲流有两个:BuffreadReader
(字符缓冲输入流)和 BufferedWriter
(字符缓冲输出流)。本文会介绍它们的构造函数和一些常用方法,最后使用真实案例来学习字符缓冲流是如何使用的。
BufferedReader(字符缓冲输入流)
BufferedReader
是 Reader
的包装流,用于缓冲字符输入流,不必在每个字符读取时都要进行系统底层调用,提高了读取效率。当创建 BufferedReader
实例时,会创建一个内部缓冲区数组,用于暂时存储从流中读取的数据。而在读取缓冲流时,会从该数组中读取,读完后会重新填充,直到流中的数据被全部读完。
构造函数
字符缓冲输入流的构造函数需要传入一个字节输入流,该字符输入流为实际读取的流对象。
BufferedReader(Reader in)
使用字符输入流Reader
创建一个字符缓冲区输入流BufferedReader
,其缓冲区使用默认大小。
BufferedReader(Reader in, int sz)
使用字符输入流Reader
和 指定的缓冲区大小,创建一个字符缓冲区输入流BufferedReader
。
常用方法
int read()
从字符缓冲区输入流中读取一个字符,读取的字符以
int
型返回,如果读取至末尾,则返回值 -1。
int read(char cbuf[], int off, int len)
从字符缓冲区输入流中读取多个字符,并存入数组cbuf
中,从缓冲区的off
下标处开始存储,最多存入len
个字符。返回值为读取的字符数,如果读取流的末尾,则返回 -1。
String readLine()
读取一行文字。一行由换行符“\n”或回车符“\r”表示。返回结果为这一行字符的文本内容。
void close()
关闭输入流,并释放与之相关的所有系统资源。
读取案例
这里只介绍如何使用缓冲区输入流来包装底层输入流,更多的读取操作与其他字符输入流一至,你可以参考前面的《【Java I/O 流】文件字符输入输出流:FileReader 和 FileWriter》,这里就不再赘述了。
案例一:使用字符缓冲输入流读取文本文件
首选创建一个文件字符输入流FileReader
,用于读取文本文件。再创建一个字符缓冲输入流BufferedReader
,其底层字符输入流使用创建好的FileReader
实例。
然后就可以使用该缓冲流进行读取文件中的内容了。
最后关闭流,这里只关闭缓冲流即可,同时它会关闭底层的字符输入流。
代码示例:
public static void read1() throws IOException {
// 创建字符输入流 FileReader 实例
FileReader fr = new FileReader("c:/io/13.txt");
// 创建字符缓冲输入流 BufferedReader 实例,底层字符输入流使用 FileReader
BufferedReader br = new BufferedReader(fr);
// 读取一个字符
System.out.println((char) br.read());
// 读取一个字符
System.out.println((char) br.read());
// 读取一个字符
System.out.println((char) br.read());
// 读取一个字符
System.out.println((char) br.read());
// 关闭输入流,只关闭缓冲区输入流即可,会同时关闭底层输入流
br.close();
}
输出内容:
水
滴
技
术
BufferedWriter(字符缓冲输出流)
BufferedWriter
是 Writer
的包装流,用于缓冲字符输出流,不必在每个字符写入时都要进行系统底层调用,提高了写入效率。当创建 BufferedWriter
实例时,会创建一个内部缓冲区数组,用于暂时存储从内存中写入的数据。缓冲区被填充满,会刷新缓冲区,进行真正的写入操作。
构造函数
字符缓冲输出流的构造函数需要传入一个字节输出流,该字符输出流为实际要写入的流对象。
BufferedWriter(Writer out)
使用字符输出流Writer
实例创建一个字符缓冲区输出流BufferedWriter
实例,其缓冲区使用默认大小。
BufferedWriter(Writer out, int sz)
使用字符输出流Writer
实例和指定的缓冲区大小,创建一个字符缓冲区输出流BufferedWriter
实例。
常用方法
void write(int c)
向字符缓冲区输出流写入一个字符。
void write(char cbuf[], int off, int len)
向字符缓冲区输出流中写入多个字符,从缓存区b
的off
下标处开始写入len
个字符。
void write(String s, int off, int len)
向字符缓冲区输出流中写入字符串,从字符串的off
下标开始,写入len
个字符。
void newLine()
写入一个回车符。
void flush()
刷新该输出流,强制将缓存区中的字节写入底层输出流。
void close()
关闭该输出流,并释放与之相关的所有系统资源。
写入案例
案例一:使用字符缓冲输出流向文本文件写入内容
首先创建一个文件字符输出流FileWriter
实例,用于向文件写入内容。再创建一个字符缓冲输出流BufferedWriter
实例。其底层字符输出流使用创建好的FileWriter
实例。
然后就可以使用该缓冲流向文本文件写入内容了。
最后关闭流,这里只关闭缓冲流即可,同时它会关闭底层的字符输出流。
代码示例:
public static void write1() throws IOException {
// 创建字符输出流 FileWriter 实例
FileWriter fw = new FileWriter("c:/io/14.txt");
// 创建字符缓冲输出流 BufferedWriter 实例,底层字符输出流使用 FileWriter
BufferedWriter bw = new BufferedWriter(fw);
// 写入字符串
bw.write("水");
// 写入字符串
bw.write("滴");
// 写入字符串
bw.write("技术");
// 关闭输出流,只关闭缓冲区输出流即可,会同时关闭底层输出流
bw.close();
}
该操作会创建一个 c:/io/14.txt
文件,写入内容:水滴技术
系列文章
🔥 【Java I/O 流】文件的操作——java.io.File 类详解
🔥 【Java I/O 流】字节输入输出流:InputStream & OutputStream
🔥 【Java I/O 流】文件字节输入输出流:FileInputStream & FileOutputStream(文件读写案例)
🔥 【Java I/O 流】字符输入输出流:Reader 和 Writer
🔥 【Java I/O 流】文件字符输入输出流:FileReader 和 FileWriter
🔥 【Java I/O 流】字节缓冲流:BufferedInputStream 和 BufferedOutputStream
精品专栏
👍 《 Java 教程:从入门到精通》
👍 《MySQL 教程:从入门到精通》