我正在重写我的一个Android应用程序,以利用NDK。每次运行该应用程序时,其中一项首要任务是打开一个1.5MB的文本文件(大约150k行),并将每一行放入数据结构中。使用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++中有更快的逐行读取文件的方法吗?谢谢。
ifstream ifs.open(...)
无法编译通过... - sth