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教程。