BufferedReader br = new BufferedReader(fr);
int cnt = 0;
while (br.readLine() != null)
cnt++;
br.close();
System.out.println(cnt);
} catch (IOException e) {
System.err.println(e);
}
}
}這個方法更快。例如在一個有200,000行的 6 MB文本文件上,第二個程序比第一個快大約20%。
但是即使第二個程序不是更快的,第一個程序依然有一個重要的問題要注意。第一個程序在JavaTM 2編譯器下引起了不贊成警告,因為DataInputStream.readLine太陳舊了。它不能恰當(dāng)?shù)膶⒆止?jié)轉(zhuǎn)換為字符,因此在操作包含非ASCII字符的文本文件時可能是不合適的選擇。(Java語言使用Unicode字符集而不是ASCII)
這就是早些時候提到的字節(jié)流和字符流之間的區(qū)別。像這樣的一個程序:
import java.io.*;
public class conv1 {
public static void main(String args[]) {
try {
FileOutputStream fos = new FileOutputStream("out1");
PrintStream ps = new PrintStream(fos);
ps.println("\uffff\u4321\u1234");
ps.close();
} catch (IOException e) {
System.err.println(e);
}
}
}向一個文件里面寫,但是沒有保存實際的Unicode字符輸出。Reader/Writer I/O 類是基于字符的,被設(shè)計用來解決這個問題。OutputStreamWriter 應(yīng)用于字節(jié)編碼的字符。
一個使用PrintWriter寫入Unicode字符的程序是這樣的:
import java.io.*;
public class conv2 {
public static void main(String args[]) {
try {
FileOutputStream fos = new FileOutputStream("out2");
OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF8");
PrintWriter pw = new PrintWriter(osw);
pw.println("\uffff\u4321\u1234");
pw.close();
} catch (IOException e) {
System.err.println(e);
}
}
}
這個程序使用UTF8編碼,具有ASCII文本是本身而其他字符是兩個或三個字節(jié)的特性。
相關(guān)推薦:計算機等級考試二級Java經(jīng)典算法大全匯總北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |