gpt4 book ai didi

c++ - 具有多个缓冲区的 std::fstream?

转载 作者:太空狗 更新时间:2023-10-29 21:28:45 25 4
gpt4 key购买 nike

您可以像这样为您的文件流指定一个缓冲区:

char buf[BUFFER_SIZE];

std::ofstream file("file", std::ios_base::binary | std::ios_base::out);
if (file.is_open())
{
file.rdbuf()->pubsetbuf(buf, BUFFER_SIZE);
file << "abcd";
}

我现在想做的是使用不止一个缓冲区:

char* buf[] = { new char[BUFFER_SIZE], new char[BUFFER_SIZE], new char[BUFFER_SIZE], };

是否可以不创建 std::streambuf 的自定义派生?

编辑:我想我需要更详细地解释我想做什么。请考虑以下情况:- 我要读取的文件不适合内存- 文件同时被某种二进制跳转搜索访问

因此,如果您将文件拆分为特定大小的逻辑页面,那么我想提供多个代表特定页面的缓冲区。当读取文件位置并且相关页面已在缓冲区中时,这将提高性能。

最佳答案

我从评论中得知你想做一种 scatter-gather I/O .我很确定 C++ 标准 I/O 流库不支持它,因此您必须自己动手。

如果您想高效地执行此操作,您可以使用操作系统对分散-聚集的支持。例如,POSIX/类 Unix 系统有 writev为此目的。

关于c++ - 具有多个缓冲区的 std::fstream?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6294057/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com