gpt4 book ai didi

java - C++ ifstream.getline() 明显比 Java 的 BufferedReader.readLine() 慢?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:40:21 27 4
gpt4 key购买 nike

我正在重写我的一个 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++ 中逐行读取文件?谢谢。

最佳答案

一个想法是 stdio 同步可能会减慢您的速度。可以将其关闭。我不知道这是否可以解释所有差异,但您可以尝试。此外,您没有正确使用 eof() 。最后,我将使用 getline()

的 std::string 版本
std::ios::sync_with_stdio(false);
ifstream ifs("/sdcard/testfile.txt");
std::string line;
while (getline(ifs, line))
{
LOGD(line);
}

我还没有测试过这段代码,但你可以试试看它是否有所作为。

关于java - C++ ifstream.getline() 明显比 Java 的 BufferedReader.readLine() 慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6820765/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com