1.1.3.2.7 高速緩存
關于硬件的高速緩存的詳細討論超出了本文的討論范圍。但是在有些情況下軟件高速緩存能被用于加速I/O?紤]從一個文本文件里面以隨機順序讀取一行的情況,這樣做的一個方法是讀取所有的行,然后把它們存入一個ArrayList (一個類似Vector的集合類):
import java.io.*;
import java.util.ArrayList;
public class LineCache {
private ArrayList list = new ArrayList();
public LineCache(String fn) throws IOException {
FileReader fr = new FileReader(fn);
BufferedReader br = new BufferedReader(fr);
String ln;
while ((ln = br.readLine()) != null)
list.add(ln);
br.close();
}
public String getLine(int n) {
if (n < 0)
throw new IllegalArgumentException();
return (n < list.size() ? (String) list.get(n) : null);
}
public static void main(String args[]) {
if (args.length != 1) {
System.err.println("missing filename");
System.exit(1);
}
try {
LineCache lc = new LineCache(args[0]);
int i = 0;
String ln;
while ((ln = lc.getLine(i++)) != null)
System.out.println(ln);
} catch (IOException e) {
System.err.println(e);
}
}
}
getLine 方法被用來獲取任意行。這個技術是很有用的,但是很明顯對一個大文件使用了太多的內存,因此有局限性。一個代替的方法是簡單的記住被請求的行最近的100行,其它的請求直接從磁盤讀取。這個安排在局域性的訪問時很有用,但是在真正的隨機訪問時沒有太大作用。
相關推薦:計算機等級考試二級Java經(jīng)典算法大全匯總北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內蒙古 |