Java - 逐字符阅读文本文件的最快方法

4

我有将近500个包含1000万字的文本文件。我需要对这些单词建立索引。那么从文本文件中逐字符读取内容的最快方法是什么呢?以下是我的初步尝试:

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
看起来完全没问题...这种方法有什么问题吗? - G_H
3
这不是逐个字符地阅读,但为什么要逐个字符地阅读? - Tim Bender
第一:正如Tim所指出的那样,这不是逐个字符地读取。请更改标题。 第二:听起来像是一个微不足道的数据量。 第三:听起来好像只运行一次。为什么你要关心性能呢?你的应用程序应该在你提出这个问题的时间内完成。(请别感到冒犯,我只是想说:在真正成为问题之前,不要担心性能) - kritzikratzi
3个回答

1

read() 不会带来显著的性能差异。

阅读更多:Peter Lawery对read()和readLine()的比较

现在,回到您最初的问题:
输入字符串:你好,你怎么样?
所以你需要索引这行的单词

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+会将字符串中的分隔符放置在任何空格(如制表符、空格等)处。

这也很好,因为split方法将与最初读取的字符串共享,所以它不会复制。这实际上比逐个字符地读取并自己组装要节省一些时间。 - Will Hartung

1
不要逐行读取,然后再逐个字符重新扫描。这样你会处理每个字符两次。只需通过BufferedReader.read()读取字符即可。

0

InputStreamReader的read()方法可以一次读取一个字符。

你可以将它包装在FileReader或BufferedReader中,例如。

希望这可以帮助!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接