首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 手寫緩衝讀取器:逐行讀取文件實現原理

     編輯:Java 相關知識

需求

不使用 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
  • 處理 Windows \r\n:讀到 \r 忽略,\n 觸發換行
  • 文件末尾無換行符時,返回剩餘內容而非 null
  • 實際生產應使用 BufferedReader (內部 8KB 緩衝區,批量讀取,性能優異)

擴展:高性能版本

  • 自維護 char[] buffer,reader.read(buffer) 批量填充
  • 緩衝區內掃描 \n,System.arraycopy 提取行
  • 這正是 BufferedReader 內部實現邏輯
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved