c++读取大文本文件
C++ read large text file
我有一个非常大的文本文件,大约20GB。该文件包含多个文本行。
我需要把这个文件读入内存块。
最有效的方法是什么?-读入缓冲区,然后解析成c++向量char[]。-逐行读取文件并放入上述矢量——还是其他方式?
最有效的方法是将数据块或数据块读入缓冲区,而不是扫描缓冲区。
I/O有开销成本,每个请求可以获取的数据越多越好。
在内存中搜索总是比每次从输入中读取一个字符快。
注意两种情况:
- 一行继续超过缓冲区的末尾。
- 缓冲区未被填充。
Edit 1: Memory Mapping
另一种选择是让操作系统将文件视为内存。从本质上讲,操作系统将在适当的情况下处理文件的块或块读取。
您将必须测量性能(即概要文件),以找出哪种方法更有效以及的效率。
这只是在答案中添加一些代码:
#include <fstream>
#include <iostream>
const static size_t numToReadAtATime = 4;
int main()
{
std::ifstream s{ "filename.dat" };
while(true)
{
char nextChars[numToReadAtATime];
if(s.readsome(nextChars, numToReadAtATime) != numToReadAtATime)
break;
// dostuff with nextChars
}
}
相关文章:
- 文本文件中的单词链表
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 如何将内容数组写入文本文件?
- 无法通过空白将文本文件行分隔为矢量
- 我正在使用嵌套的while循环来解析具有多行的文本文件,但由于某种原因,它只通过第一行,我不知道为什么
- C++将文本文件中的数据读取到结构数组中
- 在指针的帮助下,文本文件中单词的频率
- 将字符指针十六进制转换为字符串并保存在文本文件C++中
- 将值从二维数组输出到文本文件
- 如何使用 c++ 实现并发文件/文本编辑?
- 我需要转换一些代码,以便它适用于输入和输出文件文本
- 通过套接字发送二进制文件.文本文件有效,其他文件无效
- 将大型数据文件拆分为多个小文件(文本格式)
- 如何读取输入文件(文本文件)并将输入验证为有效整数
- 从文本文件/文本流中读取Q字符串错误
- 从文本文件(文本解析器)C++中读取行和列的逻辑
- 如何将*.css文件(文本文件)的内容与附加信息存储在新文件中?
- 关于内存映射文件和使用大文件文本编辑器
- 如何在读取文件文本时跳过"n"
- 使用libzip从.zip获取文件(文本除外)