将结构数组写入文本文件的快速高效方法
Fast and efficient way of writing an array of structs to a text file
我有一个二进制文件。我正在使用fread方法将该文件中的一块数据读取到结构数组中。我的结构如下所示。
struct Num {
uint64_t key;
uint64_t val
};
我的主要目标是将数组写入不同的文本文件,每行中都有空格分隔的键和值对,如下所示。
Key1 Val1
Key2 Val2
Key3 Val3
我已经编写了一个简单的函数来实现这一点。
Num *buffer = new Num[buffer_size];
// Read a block of data from the binary file into the buffer array.
ofstream out_file(OUT_FILE, ios::out);
for(size_t i=0; i<buffer_size; i++)
out_file << buffer[i].key << ' ' << buffer[i].val << 'n';
代码有效。但速度很慢。还有一种方法是先创建整个字符串,最后只向文件写入一次。
但我想知道是否有什么最好的方法可以做到这一点。我发现了一些关于鸵鸟的信息。但我不确定它是如何运作的。
将结构写入文件的最有效方法是在最少的事务中写入尽可能多的结构。
通常,这意味着使用一个数组并用一个事务写入整个数组。
该文件是流设备,当数据在流中连续流动时效率最高。这可以很简单,只需在一次调用中将数组写入更复杂的使用线程即可。执行块或突发I/O将比担心使用哪个函数调用节省更多时间。
此外,在我自己的程序中,我观察到将格式化文本放入缓冲区(数组),然后阻止写入缓冲区比使用函数将格式化文本写入文件更快。在格式化过程中,数据流可能会暂停。通过从缓冲区写入格式化数据,数据流是连续的。
写入文件还涉及其他因素,例如分配介质上的空间、系统上运行的其他任务以及文件介质的任何共享。
通过使用上述技术,我能够在几分钟内写入GB的数据,而不是以前的几个小时。
相关文章:
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- 通过方法访问结构
- 最小硬币更换问题(自上而下方法)
- C++为构建时间获取QDateTime的可靠方法
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 处理多个异常集合的C++方法
- C++ - 将函数链接到触发器的有效和高效方法
- 在C++中创建不可变且高效的类的惯用方法
- 是否有希望在std::变体上高效地调用一个公共基类方法
- 从文件中解析原始数据的最快、最高效的方法
- 从另一个类创建另一个特定类的优雅/高效的方法
- 犰狳C ++:将矩阵的每一行乘以向量的高效简洁的方法
- 将特征矩阵转换为 c 数组以便我可以使用 gsl 的性能高效方法是什么
- 检查阵列位置在C++中是否为空的 CPU 高效方法
- 为性能库制作高效包装器的智能方法
- 将结构数组写入文本文件的快速高效方法
- 从高效方法中删除指定的字符(时间和空间复杂性)
- 在C++/boost中,用*nix检索时间的最高效的方法是什么
- 在c++ 11中,返回指向std::string中某个位置的引用/指针的最高效方法是什么?
- 一种用内部向量填充结构向量的优雅/高效方法