1. 程式人生 > >IO流緩衝區物件的使用和理解。

IO流緩衝區物件的使用和理解。

/* 模擬一下 BufferedReader 明白了 BufferedReader 類中特有方法 readLine 的原理後 可以自定義一個類中包含一個功能和 readLine 一樣的方法 */ import java.io.*; class MyBufferedReader { private Reader r; public MyBufferedReader(Reader r) { this.r = r; } public String myReadLine() throws IOException { StringBuffer sb = new StringBuffer();
int ch = 0; while((ch = r.read()) != -1) { if(ch == '\r') continue; if(ch == '\n') return sb.toString(); else sb.append((char)ch); } if(sb.length() != 0)    //有時最後一行結尾處沒有換行符,此時也要返回,否者會丟失資料 return sb.toString(); return null; } public void close() throws IOException { r.close(); } } public
 class MyBufferedReaderTest01 {    public static void main(String[] args) throws IOException {    //為了方便演示,直接拋,不進行 catch Reader fr = new FileReader("buf.txt"); MyBufferedReader myBuf = new MyBufferedReader(fr); String str = null; while((str = myBuf.myReadLine()) != null) { System.out.println(str);
} myBuf.close(); } }


myReadLine()方法中,判斷到 \r 時,不把 \r 加上去,繼續讀下一個字元,當下一個字元是 \n 時,就說明此行結束
返回這行。
但是我文本里面的字元中間有 \r\n 為什麼卻答應出來了,而沒有換行


記事本里內容是:
abcd---0
abcd---1
abcd---2
abcd---3\r\nabcd---4

讀取結果為什麼是:
abcd---0
abcd---1
abcd---2
abcd---3\r\nabcd---4

碰到 \r\n 為啥沒有換行呀

你看得見的\r\n,比如‘\’的ascii碼是92,‘n’的ascii碼是110,所以應該是兩個字元。你的意思是碰到\r\n就換行吧,你可以定義一個字串str="\\t\\n",然後做一個判斷,if讀到的連續兩個可見字元是str,則換行。