2011-11-01 232 views
4

我有近1000個1000萬字的文本文件。我必須索引這些單詞。按字符從文本文件中讀取的最快方法是什麼?這是我最初的嘗試:Java - 讀取文本文件的最快方法字符字符

InputStream ist = new FileInputStream(this.path+"/"+doc); 
BufferedReader in = new BufferedReader(new InputStreamReader(ist)); 

String line; 

while((line = in.readLine()) != null){ 


    line = line.toUpperCase(Locale.ENGLISH); 
    String word = ""; 

    for (int j = 0; j <= line.length(); j++) { 
     char c= line.charAt(j); 
    // OPERATIONS 

} 
+1

看起來非常好......這種方法有什麼問題? –

+3

這不是一次讀取一個字符,而是爲什麼要逐個字符地讀取字符? –

+0

第一:正如蒂姆指出的,這不是讀char字符。請更改標題。 秒:這聽起來像是一個微不足道的數據量。第三:聽起來像這樣運行一次。爲什麼你關心表現呢?您的應用應該在您提問時完成。 (不要感到冒犯,我的意思是:停止擔心性能,直到它真的成爲問題) – kritzikratzi

回答

0

InputStreamReader的read()方法一次可以讀取一個字符。

您可以將其包裝在FileReader或BufferedReader或示例中。

希望這會有所幫助!

1

read()不會在性能上產生相當大的差異。

瞭解更多:Peter Lawery's comparison of read() and readLine()

現在,回到你原來的問題:
輸入字符串:hello how are you?
所以,你需要指數字線,即:

BufferedReader r = new BufferedReader(new InputStreamReader(inputStream)); 
String line; 
while ((line = r.readLine()) != null) { 
    String[] splitString = line.split("\\s+"); 
    //Do stuff with the array here, i.e. construct the index. 
} 

注意:圖案\\s+將把字符串中的分隔符作爲任何空格,如製表符,空格等。

+0

這也很好,因爲拆分方法將與最初讀取的字符串共享,所以它不會複製。這實際上會花費一些時間來逐字讀出它,並且將它們自己組裝起來。 –

0

不要讀取行,然後重新掃描char字符。這樣你就可以處理每個角色兩次。只需通過BufferedReader.read()讀取字符。