小编Eri*_*ric的帖子

C++ ifstream.getline()明显慢于Java的BufferedReader.readLine()?

我正在重写我的一个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
}
Run Code Online (Sandbox Code Playgroud)

在ifstream中使用C++需要更长的时间......对于同一个文件大约需要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);
    }
}
Run Code Online (Sandbox Code Playgroud)

我对C++很生疏,但是对于增加的读取时间没有任何合理的解释.有一段时间我认为它可能是LOGD功能,但我尝试完全取消它,读取时间根本没有多大帮助.有没有人对这个问题有什么想法?有没有更快的方法在C++中逐行读取文件?谢谢.

c++ java java-native-interface android android-ndk

4
推荐指数
1
解决办法
4944
查看次数

标签 统计

android ×1

android-ndk ×1

c++ ×1

java ×1

java-native-interface ×1