Java BufferedReader
最后修改于 2024 年 1 月 27 日
Java BufferedReader 教程展示了如何使用 Java BufferedReader 提高文本文件的读取性能。Java 教程 是一个关于 Java 语言的全面教程。
缓冲输入流从称为缓冲区的内存区域读取数据。 只有当缓冲区为空时,才会调用原生输入 API。
对于非缓冲 I/O 流,每个读取请求都由底层操作系统直接处理。 这种效率要低得多,因为每个这样的请求通常会触发磁盘访问、网络活动或一些其他相对昂贵的操作。
Java BufferedReader
BufferedReader
从字符输入流读取文本,缓冲字符,以便提供高效地读取字符、数组和行。
可以指定缓冲区大小,也可以使用默认大小。 默认值对于大多数用途来说都足够大。
以下一些示例使用此文本文件
The Battle of Thermopylae was fought between an alliance of Greek city-states, led by King Leonidas of Sparta, and the Persian Empire of Xerxes I over the course of three days, during the second Persian invasion of Greece.
Java BufferedReader 示例
在以下示例中,我们使用 BufferedReader
读取文本文件。 它与 FileReader
类一起使用。
FileReader
依赖于平台的默认编码。 自 Java 11 以来,该问题已得到纠正。 现在可以显式指定编码。package com.zetcode; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.nio.charset.StandardCharsets; public class BufferedReaderEx { public static void main(String[] args) throws IOException { var fileName = "src/resources/thermopylae.txt"; try (var br = new BufferedReader(new FileReader(fileName, StandardCharsets.UTF_8))) { String line; while ((line = br.readLine()) != null) { System.out.println(line); } } } }
在该示例中,我们将 BufferedReader
与 FileReader
一起使用。
var fileName = "src/resources/thermopylae.txt";
我们指定文件名。
try (var br = new BufferedReader(new FileReader(fileName, StandardCharsets.UTF_8))) {
我们将 FileReader
包装到 BufferedReader
中,以提高其性能。
String line; while ((line = br.readLine()) != null) { System.out.println(line); }
readLine
读取一行文本。 它返回包含该行内容的字符串,不包括任何行终止字符,如果已到达流的末尾而没有读取任何字符,则返回 null
。
Java Files.newBufferedReader
Files.newBufferedReader
是一个方便的方法,它打开一个文件进行读取,返回一个 BufferedReader
,可用于以高效的方式从文件中读取文本。 文件中的字节使用指定的字符集解码为字符。
package com.zetcode; import java.io.IOException; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Paths; public class BufferedReaderEx2 { public static void main(String[] args) throws IOException { var fileName = "src/resources/thermopylae.txt"; var path = Paths.get(fileName); try (var br = Files.newBufferedReader(path, StandardCharsets.UTF_8)) { String line; while ((line = br.readLine()) != null) { System.out.println(line); } } } }
该示例读取 thermopylae.txt
文件,利用 Files.newBufferedReader
方法。
Java BufferedReader with InputStreamReader
以下示例将 BufferedReader
与 InputStreamReader
一起使用。 InputStreamReader
是从字节流到字符流的桥梁。 它读取字节并使用指定的字符集将它们解码为字符。
package com.zetcode; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.URL; import java.nio.charset.StandardCharsets; public class BufferedReaderEx3 { public static void main(String[] args) throws IOException { var urlPath = "http://webcode.me"; var url = new URL(urlPath); try (var br = new BufferedReader(new InputStreamReader(url.openStream(), StandardCharsets.UTF_8))) { String line; while ((line = br.readLine()) != null) { System.out.println(line); } } } }
该示例读取 webcode.me
网站的主页。
来源
在本文中,我们使用了 Java BufferedReader。
作者
列出所有Java教程。