1.1.3.2 調(diào)整 JavaTM I/O 性能
1.1.3.2.1 加速I/O的基本規(guī)則
作為這個討論的開始,這里有幾個如何加速I/O的基本規(guī)則:
1. 避免訪問磁盤
2. 避免訪問底層的操作系統(tǒng)
3. 避免方法調(diào)用
4. 避免個別的處理字節(jié)和字符
很明顯這些規(guī)則不能在所有的問題上避免,因?yàn)槿绻軌虻脑捑蜎]有實(shí)際的I/O被執(zhí)行。考慮下面的計(jì)算文件中的新行符('\n')的三部分范例。
方法1: read方法
第一個方法簡單的使用FileInputStream的read方法:
import java.io.*;
public class intro1 {
public static void main(String args[]) {
if (args.length != 1) {
System.err.println("missing filename");
System.exit(1);
}
try {
FileInputStream fis = new FileInputStream(args[0]);
int cnt = 0;
int b;
while ((b = fis.read()) != -1) {
if (b == '\n')
cnt++;
}
fis.close();
System.out.println(cnt);
} catch (IOException e) {
System.err.println(e);
}
}
}然而這個方法觸發(fā)了大量的底層運(yùn)行時系統(tǒng)調(diào)用--FileInputStream.read--返回文件的下一個字節(jié)的本機(jī)方法。
相關(guān)推薦:計(jì)算機(jī)等級考試二級Java經(jīng)典算法大全匯總北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |