InputStreamReader
和BufferedReader
是Java I/O中两个常用的类,它们经常一起使用来读取文本数据。
-
InputStreamReader
是一个字符流读取器,它将字节流(InputStream
)转换为字符流,以便按字符读取数据。它实现了Reader
接口。 -
BufferedReader
是一个缓冲字符输入流,它包装了其他字符输入流(如InputStreamReader
),提供了更高效的读取方式。它提供了缓冲功能,可以一次读取多个字符,并且具有readLine()
方法,可以按行读取文本数据。
BufferedReader
常常用来包装InputStreamReader
,以提供缓冲和更高效的读取。通过使用BufferedReader
,可以减少对底层资源的频繁访问,从而提高读取性能。
下面是一个示例,展示了如何使用InputStreamReader
和BufferedReader
来读取文本文件:
try (InputStream inputStream = new FileInputStream("file.txt");
InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "UTF-8");
BufferedReader reader = new BufferedReader(inputStreamReader)) {
String line;
while ((line = reader.readLine()) != null) {
// 处理每一行文本
System.out.println(line);
}
} catch (IOException e) {
// 异常处理代码
}
在上述示例中,我们首先创建了一个FileInputStream
来读取文件的字节流,然后使用InputStreamReader
将字节流转换为字符流,并指定字符编码为UTF-8。最后,我们使用BufferedReader
包装InputStreamReader
,以提供缓冲和更高效的读取。通过BufferedReader
的readLine()
方法,我们可以按行读取字符流中的文本数据。
需要注意的是,在try-with-resources
语句中使用BufferedReader
,它会自动关闭底层的InputStreamReader
,而InputStreamReader
会自动关闭底层的InputStream
。这样可以确保在代码块结束后,所有的资源都会被正确关闭,无需手动调用close()
方法。
综上所述,InputStreamReader
和BufferedReader
是常用的读取文本数据的类。InputStreamReader
将字节流转换为字符流,而BufferedReader
提供了缓冲和高效读取的功能,常常用来包装InputStreamReader
以提供更好的读取性能。