2011-11-01 4 views
4

У меня есть почти 500 текстовых файлов с 10 миллионами слов. Я должен индексировать эти слова. Каков самый быстрый способ читать из текстового файла по характеру? Вот моя первоначальная попытка:Java - самый быстрый способ чтения текстовых файлов Char Char Char

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

первый: как отметил tim, это не чтение char по char. пожалуйста, измените название. секунд: это звучит как ничтожный объем данных. Третий: похоже, что это работает один раз. почему вы вообще заботитесь о производительности? ваше приложение должно было закончиться в то время, когда вы задали этот вопрос. (не обижайтесь, я просто имею в виду: перестаньте беспокоиться о производительности, пока это действительно не проблема) – kritzikratzi

ответ

0

Метод read() InputStreamReader может считывать символ за раз.

Вы можете обернуть его вокруг 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

Это хорошо и потому, что метод split будет делиться с первоначально прочитанной строкой, поэтому он не будет копировать. Это на самом деле наберет некоторое время, прочитав его персонаж по характеру и собрав все это самостоятельно. –

0

Не читайте строки, а затем повторно просматривайте строковые символы char. Таким образом, вы обрабатываете каждый символ дважды. Просто прочитайте символы через BufferedReader.read().