Я делаю приложение для словаря на Android.Во время запуска приложение загрузит содержимое файла .index (~ 2 МБ, 100 000+ строк)
Однако, когда я использую BufferedReader.readLine () и что-то сделаю с возвращенной строкой, приложение вызовет OutOfMemory.
// Read file snippet
Set<String> indexes = new HashSet<String)();
FileInputStream is = new FileInputStream(indexPath);
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
String readLine;
while ( (readLine = reader.readLine()) != null) {
indexes.add(extractHeadWord(readLine));
}
// And the extractHeadWord method
private String extractHeadWord(String string) {
String[] splitted = string.split("\\t");
return splitted[0];
}
При чтении журнала я обнаружил, что во время выполнения GC вызывает явную очистку объектов много раз (GC_EXPLICIT освобождает объекты xxx, в которых xxx - большое число, такое как 15000, 20000).
И я попробовал другой способ:
final int BUFFER = 50;
char[] readChar = new char[BUFFER];
//.. construct BufferedReader
while (reader.read(readChar) != -1) {
indexes.add(new String(readChar));
readChar = new char[BUFFER];
}
.. и он работает очень быстро.Но это было не совсем то, что я хотел.
Есть ли какое-либо решение, которое быстро работает как второй фрагмент и легко используется как первый?
С уважением.