重要修正:
问题不是我之前说的那样,手动分析后,我了解到当我用下面这行代码替换掉原来的代码:"file >> x >> y >> z;",使用"file.readline(buffer, size);"只需要0.4秒。所以问题完全不同,如何从这一行数据中解析出float类型的数值,file>>x>>y>>z;
(我不知道是否应该删除这个问题,因为原始问题已经不相关了)
=== 旧内容 === 经过广泛的互联网和Stack Overflow研究,我了解到C ++读取大文件的最佳方法是使用内存映射文件。
我有一个txt文件,15MB,每行都有3个由空格分隔的浮点数。
我有以下代码:
(我不知道是否应该删除这个问题,因为原始问题已经不相关了)
=== 旧内容 === 经过广泛的互联网和Stack Overflow研究,我了解到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秒。
有什么建议吗? 谢谢