// 正確:單次讀取賦值給變數
int ch;
while ((ch = fr.read()) != -1) {
System.out.printf("%c", (char)ch);
}
// 錯誤:條件判斷讀一次,循環體再讀一次
while (fr.read() != -1) {
System.out.printf("%c", (char)fr.read()); // 這裡又讀了!
}
FileReader.read() 每次調用都會從流中消費一個字元並移動指針。錯誤代碼中:
while (fr.read() != -1) 讀取並丟棄第 1 個字元。fr.read() 再讀取第 2 個字元並輸出。try (FileReader fr = new FileReader("file.txt")) {
int ch;
while ((ch = fr.read()) != -1) {
// 處理 ch
}
} catch (IOException e) {
e.printStackTrace();
}
BufferedReader 按行讀取,效能提升數量級。