2011-11-01 237 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()读取字符。