重要编辑: 问题不是我所说的,在手动分析后我明白当我替换行时:“file >> x >> y >> z;” 使用“file.readline(buffer, size);”行
它只需要 0.4 秒,所以问题完全不同,如何从 file>>x>>y>>z 行解析浮点数;
(我不知道我是否应该删除问题,因为原始问题不相关)
=== OLD === 在对互联网和堆栈溢出进行大量研究之后,我了解到使用 c++ 读取大文件的最佳方法是使用内存映射文件。
我有一个 txt 文件,15MB,每行有 3 个浮点数,由空格分隔。
我有这个代码:
ifstream file(path)
float x,y,z;
while(!file.eof())
file >> x >> y >> z;
它可以在 9.5 秒内读取此文件。
为了使用 stackoverflow 用户更快地读取文件,我想出了这段代码,如果我理解它正确使用内存映射文件并且应该更快地读取它 C++ 中的流类型,如何从 IstringStream 读取?
#include <iostream>
#include <boost/iostreams/stream.hpp>
#include <boost/iostreams/device/mapped_file.hpp>
namespace io = boost::iostreams;
int main()
{
io::stream<io::mapped_file_source> str("test.txt");
// you can read from str like from any stream, str >> x >> y >> z
for(float x,y,z; str >> x >> y >> z; )
std::cout << "Reading from file: " << x << " " << y << " " << z << '\n';
}
不幸的是,速度保持不变,仍然是 9.5 秒。
有什么建议么 ?谢谢