不使用 BufferedReader,手寫類實現文件逐行讀取,理解底層原理。
FileReader (字符流) 逐字符讀取\n (LF) 或 \r\n (CRLF) 判定行結束StringBuilder 累積行內容null 表示 EOF
import java.io.*;
public class MyBufferedReader {
private final FileReader reader;
public MyBufferedReader(FileReader reader) {
this.reader = reader;
}
public String readLine() throws IOException {
StringBuilder sb = new StringBuilder();
int ch;
while ((ch = reader.read()) != -1) {
if (ch == '\r') continue; // 忽略 CR
if (ch == '\n') return sb.toString(); // LF 結束
sb.append((char) ch);
}
return sb.length() > 0 ? sb.toString() : null; // 文件末尾無換行符
}
public void close() throws IOException {
reader.close();
}
public static void main(String[] args) throws IOException {
try (MyBufferedReader br = new MyBufferedReader(new FileReader("MyBufferedReader.java"))) {
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
}
}
}
reader.read() 返回 int,-1 表示 EOF\r\n:讀到 \r 忽略,\n 觸發換行nullBufferedReader (內部 8KB 緩衝區,批量讀取,性能優異)char[] buffer,reader.read(buffer) 批量填充\n,System.arraycopy 提取行BufferedReader 內部實現邏輯