日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

自定義類模擬BufferedReader的readLine()功能

作者:飯飯m 更新時間: 2024-02-28 編程語言
  • 在這里插入代碼片我要返回一個字符串,怎么辦?我們必須去看看r對象能夠讀取什么?兩種讀取方法,一次讀取一個字符或一次讀取一個字符數組。那么,我們要返回一個字符串嗎,用哪個方法比較好呢?我們很容易想到字符數組比較好,但是問題來了,就是這個字符數組的長度是多長呢?
  • 根本就沒有辦法定義數組的長度,你定義多長都不合適。所以只能選擇一次讀取一個字符。但是呢,使用這種方式的時候,我們再讀取下一個字符的時候,上一個字符就丟失了。所以,我們又應該定義一個臨時存儲空間把讀過的字符給存儲起來。
  • 這個用誰比較合適呢?數組、集合、字符串緩沖區三個可供選擇。
  • 經過分析,最終選擇字符串緩沖區對象。并且使用的是StringBuilder。
測試
public class MyBufferedReaderDemo {
    public static void main(String[] args) throws IOException {
        MyBufferedReader mbr = new MyBufferedReader(new FileReader("my.txt"));

        String line = null;
        while ((line = mbr.readLine()) != null) {
            System.out.println(line);
        }

        mbr.close();
    }
}
MyBufferedReader
/**
 * 用Reader模擬BufferedReader的readline()功能
 * <p>
 * readLine()一次讀取一行根據換行符判斷是否結束,只返回內容,不返回換行符
 */
public class MyBufferedReader {
    private Reader r;

    public MyBufferedReader(Reader r) {
        this.r = r;
    }

    /**
     * 寫一個方法,返回值是一個字符串。
     */

    public String readLine() throws IOException {
        StringBuilder sb = new StringBuilder();

        //麻煩的是判斷結束,但是結束之前應該是一直讀取,直到-1
        int ch = 0;
        while ((ch = r.read()) != -1) {
            if (ch == '\r') {
                continue;
            }
            if (ch == '\n') {
                return sb.toString();
            } else {
                sb.append((char) ch);
            }
        }
        //為了防止數據丟失,判斷sb的長度不能大于0
        if (sb.length() > 0) {
            return sb.toString();
        }
        return null;
    }

    /**
     * 寫一個關閉方法
     */
    public void close() throws IOException {
        this.r.close();
    }
}

原文鏈接:https://blog.csdn.net/qq_41834086/article/details/107631410

  • 上一篇:沒有了
  • 下一篇:沒有了
欄目分類
最近更新