c ++二进制文件i / o中的场景

时间:2012-09-13 04:25:13

标签: c++ file-io

这里的大多数精明的学生都告诉我们,二进制文件i / o总是比格式化的i / o更快。经过一段谷歌搜索后,我确定完成二进制i / o的最有效方法不是直接从文件中流式传输,一次是每个值,而是通过读取大量数据,如4k或8k块,然后从该缓冲区中解析数据。我的问题是,我说使用fstream从文件中获取一大块数据并将其存储到8192字节的char数组中。现在让我们说它有一个大约30个字节的标题,然后之后的所有数据就像每个72字节的结构。这将在结尾留下56个字节的不完整数据,我无法读入结构。我如何处理这个以最大限度地提高效率(是的,使用c ++流,请不要在这里抱怨c ++流,我已经听过很多关于它的论点。这完全是关于二进制i / o而不是特定介质的功效的问题请i)。我只是将那56个字节留在未使用的末尾,或者我尝试将frankenstein与下一个缓冲区的尾端和前16个字节放在一起,还是还有另一种方法可以解决这个问题?我的问题也是,为什么在解析之前将块读入这样的缓冲区,更快?相反,如果你不相信这是真的,那么请解释为什么你可以。谢谢你的时间。

2 个答案:

答案 0 :(得分:1)

使用标准iostream库,它会自动执行缓冲。

答案 1 :(得分:0)

首先,大块被高估了。在你的情况下,没有理由只读取2 ^ N块来重新组合它们。

其次,如果你决定重新发布,你可以通过缓冲和内存复制来实现这一目的。