Java IO 学习总结(四)BufferedReader 缓冲字符流

news/2024/11/30 0:44:38/

Java IO 学习总结(一)输入流/输出流
Java IO 学习总结(二)File 类
Java IO 学习总结(三)BufferedInputStream
Java IO 学习总结(四)BufferedReader 缓冲字符流

前言:

学习IO流,记录并分享。文章如有错误,恳请指正。

类图:

类图

1、什么是 BufferedReader ?

BufferedReader 是一个缓冲字符输入流,该流可以对 FileRead 进行包装,提供一个缓存数组,一次将数据按照一定规则读取到缓存区中,输入流每次读取文件数据时都需要将数据进行字符编码,而 BufferedReader 的出现,降低了输入流访问数据源的次数,将一定大小的数据一次读取到缓存区并进行字符编码,从而提高 IO 的效率。

2、为什么使用 BufferedReader ?

BufferedReader 从字符输入流中读取文本,缓冲字符,以便有效地读取字符、数组和行。可以指定缓冲区大小,也可以使用默认大小(8192)。对于大多数用途,默认值足够大
一般来说,对Reader发出的每个读请求都会导致对底层字符或字节流发出相应的读请求。因此,建议将 BufferedReader 封装在任何 read() 操作可能代价高昂的 Reader(如FileReaders和InputStreamReaders ) 周围。
例如:

BufferedReader in = new BufferedReader(new FileReader("foo.in"));

将缓冲来自指定文件的输入。如果没有缓冲,每次调用 read() 或 readLine() 都可能导致从文件中读取字节,转换为字符,然后返回,这可能非常低效。
使用DataInputStream进行文本输入的程序可以通过使用适当的BufferedReader替换每个DataInputStream来进行本地化。

3、BufferedReader 的构造函数

/*** Creates a buffering character-input stream that uses an input buffer of* the specified size.** @param  in   A Reader* @param  sz   Input-buffer size** @exception  IllegalArgumentException  If {@code sz <= 0}*/
public BufferedReader(Reader in, int sz) {super(in);if (sz <= 0)throw new IllegalArgumentException("Buffer size <= 0");this.in = in;cb = new char[sz];nextChar = nChars = 0;
}/*** Creates a buffering character-input stream that uses a default-sized* input buffer.** @param  in   A Reader*/
public BufferedReader(Reader in) {this(in, defaultCharBufferSize);
}

构造函数简析:

public BufferedReader(Reader in, int sz); // 创建一个BufferedRead 缓冲字符流对象,使用指定大小的缓存区。
public BufferedReader(Reader in); // 创建一个BufferedRead 缓冲字符流对象,使用默认大小(8192)的缓存区。

4、BufferedReader 的公共方法

int read();  // 读取单个字符。
int read(char[] cbuf, int off, int len);  // 将指定范围内的字符读入数组。
String readLine();  // 读取一个文本行。
boolean    ready();  // 判断此流是否可读。
void reset();  // 将流重置到最新的标记。
long skip(long n);  // 跳过字符。
void close(); // 关闭该流并释放与之关联的所有资源。
void mark(int readAheadLimit); // 标记流中的当前位置。
boolean markSupported(); // 判断此流是否支持 mark() 操作(它一定支持)。

5、实战

BufferedReader 的使用方法
使用缓冲字符输入/输出流,将A磁盘的某文件复制到B磁盘中。

public class TestBufferedReadAndWrite {public static void main(String[] args) {copyFile();}/*** 使用缓冲字符输入/输出流,将A磁盘的某文件复制到B磁盘中。* <p>* throws FileNotFoundException 创建输入流,如果根据路径找不到文件,可能会抛出这个异常* throws IOException 写入数据到目标文件中失败,调用 close() 关闭流,可能会抛出这个异常*/private static void copyFile() {// 文件信息String sourceFilePath = "D:/test/gls.txt";String targetFilePath = "D:/test/success/Writer.txt";// 输入流/输出流Reader reader = null;BufferedReader bufferedReader = null;Writer writer = null;BufferedWriter bufferedWriter = null;try {// 输入流reader = new FileReader(sourceFilePath);// 使用默认的缓冲区大小来创建缓冲字符输入流,默认大小为8192个字符bufferedReader = new BufferedReader(reader);// 输出流writer = new FileWriter(targetFilePath);bufferedWriter = new BufferedWriter(writer);String result = "";while ((result = bufferedReader.readLine()) != null) {writer.write(result); // 把内容写入文件bufferedWriter.newLine(); // 换行 result 是一行数据,所以每写一行就要换行}writer.flush();} catch (FileNotFoundException e) {e.printStackTrace();throw new RuntimeException(e);} catch (IOException e) { // new FileWriter();e.printStackTrace();throw new RuntimeException(e);} finally {try {if (bufferedReader != null) {bufferedReader.close();}if (bufferedWriter != null) {bufferedWriter.close();}} catch (IOException e) {e.printStackTrace();throw new RuntimeException(e);}}System.out.println("执行完成!");}}

public class TestBufferedReadAndWrite {

public static void main(String[] args) {copyFile();
}/*** 使用缓冲字符输入/输出流,将A磁盘的某文件复制到B磁盘中。* <p>* throws FileNotFoundException 创建输入流,如果根据路径找不到文件,可能会抛出这个异常* throws IOException 写入数据到目标文件中失败,调用 close() 关闭流,可能会抛出这个异常*/
private static void copyFile() {// 文件信息String sourceFilePath = "D:/test/gls.txt";String targetFilePath = "D:/test/success/Writer.txt";// 输入流/输出流Reader reader = null;BufferedReader bufferedReader = null;Writer writer = null;BufferedWriter bufferedWriter = null;try {// 输入流reader = new FileReader(sourceFilePath);// 使用默认的缓冲区大小来创建缓冲字符输入流,默认大小为8192个字符bufferedReader = new BufferedReader(reader);// 输出流writer = new FileWriter(targetFilePath);bufferedWriter = new BufferedWriter(writer);String result = "";while ((result = bufferedReader.readLine()) != null) {writer.write(result); // 把内容写入文件bufferedWriter.newLine(); // 换行 result 是一行数据,所以每写一行就要换行}writer.flush();} catch (FileNotFoundException e) {e.printStackTrace();throw new RuntimeException(e);} catch (IOException e) { // new FileWriter();e.printStackTrace();throw new RuntimeException(e);} finally {try {if (bufferedReader != null) {bufferedReader.close();}if (bufferedWriter != null) {bufferedWriter.close();}} catch (IOException e) {e.printStackTrace();throw new RuntimeException(e);}}System.out.println("执行完成!");
}

}
public class TestBufferedReadAndWrite {

public static void main(String[] args) {copyFile();
}/*** 使用缓冲字符输入/输出流,将A磁盘的某文件复制到B磁盘中。* <p>* throws FileNotFoundException 创建输入流,如果根据路径找不到文件,可能会抛出这个异常* throws IOException 写入数据到目标文件中失败,调用 close() 关闭流,可能会抛出这个异常*/
private static void copyFile() {// 文件信息String sourceFilePath = "D:/test/gls.txt";String targetFilePath = "D:/test/success/Writer.txt";// 输入流/输出流Reader reader = null;BufferedReader bufferedReader = null;Writer writer = null;BufferedWriter bufferedWriter = null;try {// 输入流reader = new FileReader(sourceFilePath);// 使用默认的缓冲区大小来创建缓冲字符输入流,默认大小为8192个字符bufferedReader = new BufferedReader(reader);// 输出流writer = new FileWriter(targetFilePath);bufferedWriter = new BufferedWriter(writer);String result = "";while ((result = bufferedReader.readLine()) != null) {writer.write(result); // 把内容写入文件bufferedWriter.newLine(); // 换行 result 是一行数据,所以每写一行就要换行}writer.flush();} catch (FileNotFoundException e) {e.printStackTrace();throw new RuntimeException(e);} catch (IOException e) { // new FileWriter();e.printStackTrace();throw new RuntimeException(e);} finally {try {if (bufferedReader != null) {bufferedReader.close();}if (bufferedWriter != null) {bufferedWriter.close();}} catch (IOException e) {e.printStackTrace();throw new RuntimeException(e);}}System.out.println("执行完成!");
}

}
Java IO 学习总结(五) 正在完善中,后续更新~



http://www.ppmy.cn/news/573058.html

相关文章

记一次confluence故障的RCA

记一次confluence故障的RCA Confluence故障RCA(Root Cause Analysis)问题问题原因&#xff08;Root Cause&#xff09;故障触发原因核实8091端口对应的服务进程关于Synchrony 核实Synchrony服务进程的启动方式启动Synchrony服务并观察Confluence是否连上Q&A Confluence故障…

CEC和ARC介绍

CEC和ARC介绍众所周知&#xff0c;HDMI作为一个数字化视频音频的接收标准&#xff0c;是可以同时传输视频和音频的&#xff0c;当然随着HDMI版本的提升&#xff0c;它的功能也一直在增强。事实上当HDMI升级到1.3时&#xff0c;人们就发现了HDMI多了一个CEC功能。ARC就是在HDMI版…

c - ar 中的 “rcs“选项有什么作用?

c - ar 中的 "rcs"选项有什么作用&#xff1f; 我确实阅读了 man 文件&#xff0c;但它没有帮助。 rcs似乎是传递给 ar 的最流行的选项&#xff0c;但对我来说含义不是很清楚。 所以c意味着创建一个新的存档&#xff0c;但是为什么要使用 r ?这似乎代表“替换”&am…

安鸾之RCE系列

声明&#xff1a;文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用&#xff0c;任何人不得将其用于非法用途以及盈利等目的&#xff0c;否则后果自行承担&#xff01; 本文转发于涂寐’s Blogs&#xff1a;https://0xtlu.github.io&#xff0c;转载请注明出处&…

rca接口_CIOKS: “ 为什么我们要用RCA接口和连线?”

中文字幕视频-《为什么我们要用RCA接口和连线&#xff1f;》 &#x1f447; 为了让大家更清晰的阅读视频内容&#xff0c;下面附上中文字幕内容 &#x1f447; Hello&#xff01;大家好&#xff0c; 我是来自CIOKS的Poul&#xff0c;在这个视频当中&#xff0c;我会为大家介绍我…

rca接口_常用的音频接口及焊接方法

1.TRS 小三芯/大三芯/大二芯等 实物图 TRS有三种尺寸: (1)6.3mm、(2)3.5mm(3)2.5mm 每个端点代表的意义: (1)TIP(尖端)=positive(正极) 热端,信号+,立体声时为左声道 (2)RING(环端)=negative(负极) 冷端,信号-,立体声时为右声道 (3)SLEEVE(套筒端)=shield或ground 屏蔽端…

RCS认证TC怎么申请

【RCS认证TC怎么申请】 GRS/RCS/GOTS/OCS/RWS/RDS申请TC提供的文件&#xff1a; 1)内销凭待/外销凭待(正本盖章) 上游卖家必须是您认证的单位之一(如果没有&#xff0c;请联系我们CU加单位并支付费用审核)&#xff0c;并与单位一起审核)&#xff0c;TC申请上的卖家信息一致 发票…

[转]什么是RCA接头

RCA 是Radio Corporation of American的缩写词,因为RCA接头由这家公司发明的。RCA俗称莲花插座,几乎所有的电视机、影碟机类产品都有这个接口。它并不是专门为哪一种接口设计,既可以用在音频,又可以用在普通的视频信号,也是DVD分量(YCrCb)的插座,只不过数量是三个。RCA接…