我正在做一些项目,我想知道哪种方式最有效地从文件中读取大量数据(我说的是 100 行到大约 30 亿行的文件,可以多考虑)。读取后,数据将存储在结构化数据集中(vector<entry>
其中“条目”定义结构化行)。
此文件的结构化行可能如下所示:
string int int int string string
它也以适当的平台结尾,EOL
并以 TAB 分隔
我希望完成的是:
- 将文件读入内存 (
string
) 或vector<char>
- 从我的缓冲区中读取原始数据并将其格式化为我的数据集。
我需要考虑内存占用并具有快速的解析率。我已经在避免使用,stringstream
因为它们似乎太慢了。
我还通过使用以下方法避免对我的文件进行多次 I/O 调用:
// open the stream
std::ifstream is(filename);
// determine the file length
is.seekg(0, ios_base::end);
std::size_t size = is.tellg();
is.seekg(0, std::ios_base::beg);
// "out" can be a std::string or vector<char>
out.reserve(size / sizeof (char));
out.resize(size / sizeof (char), 0);
// load the data
is.read((char *) &out[0], size);
// close the file
is.close();
我曾想过将这个巨大的std::string
然后逐行循环,我会将行信息(字符串和整数部分)提取到我的数据集行中。有没有更好的方法来做到这一点?
编辑:此应用程序可以在 32 位、64 位计算机上运行,或者在超级计算机上运行更大的文件。
任何建议都非常受欢迎。
谢谢