【Java I/O 流】字符缓冲流:BuffreadReader 和 BufferedWriter

在这里插入图片描述

❤️ 个人主页:水滴技术
🚀 支持水滴:点赞👍 + 收藏⭐ + 留言💬
🌸 订阅专栏:Java 教程:从入门到精通


大家好,我是水滴~~

缓冲流是一个包装流,在创建缓冲流实例时,需要传入底层真实操作的输入或输出流。其主要的作用就是为了提高读写效率而生的。

今天讲的字符缓冲流有两个:BuffreadReader (字符缓冲输入流)和 BufferedWriter(字符缓冲输出流)。本文会介绍它们的构造函数和一些常用方法,最后使用真实案例来学习字符缓冲流是如何使用的。

BufferedReader(字符缓冲输入流)

BufferedReaderReader 的包装流,用于缓冲字符输入流,不必在每个字符读取时都要进行系统底层调用,提高了读取效率。当创建 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(字符缓冲输出流)

BufferedWriterWriter 的包装流,用于缓冲字符输出流,不必在每个字符写入时都要进行系统底层调用,提高了写入效率。当创建 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)

向字符缓冲区输出流中写入多个字符,从缓存区 boff 下标处开始写入 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 流】I/O 流的原理与流的分类

🔥 【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

精品专栏

👍 《IDEA 教程:从入门到精通

👍 《 Java 教程:从入门到精通

👍 《MySQL 教程:从入门到精通

在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

水滴技术

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值