Я переписываю одно из моих приложений для Android, чтобы использовать преимущества NDK, и первое, что он должен делать каждый раз, это открывать текстовый файл размером 1,5 МБ (примерно 150 тыс. Строк) и вставлять каждую строку в структуре данных. Когда я сделал эту операцию, используя Java BufferedReader.readLine (), чтение файла с SD-карты занимает ~ 2,5 секунды. Вот код, который я использовал для этого:
try {
BufferedReader br = new BufferedReader(new FileReader("/sdcard/testfile.txt"));
String thisLine;
while ((thisLine = br.readLine()) != null) {
Log.d(TAG, thisLine);
}
} catch (IOException e) {
//Log error
}
Использование C ++ с ifstream занимает НАМНОГО дольше ... около 3 минут для одного и того же файла. Вот код, который я использовал в C ++:
char buffer[256];
ifstream ifs;
ifs.open("/sdcard/testfile.txt", ifstream::in);
if (ifs.is_open()) {
while (!ifs.eof()) {
ifs.getline (buffer,100);
LOGD(buffer);
}
}
Я довольно ржавый на C ++, но не могу придумать никакого логического объяснения увеличенного времени чтения. Какое-то время я думал, что это может быть функция LOGD, но я пытался вообще ее убрать, и время чтения не особо помогло. У кого-нибудь есть идеи по поводу этой проблемы? Есть ли более быстрый способ читать файл построчно в C ++? Спасибо.