我想将文件读入字符串。我正在寻找不同的方法来有效地做到这一点。
使用固定大小的 *char 缓冲区
我收到了Tony 的回答,它创建了一个 16 kb 缓冲区并读入该缓冲区并附加缓冲区,直到没有更多内容可读取。我了解它是如何工作的,而且我发现它非常快。我不明白的是,在该答案的评论中,据说这种方式将所有内容复制了两次。但据我了解,它只发生在内存中,而不是磁盘中,所以几乎不引人注意。它从缓冲区复制到内存中的字符串是否有问题?
使用 istreambuf_iterator
我收到的另一个答案使用 istreambuf_iterator。代码看起来很漂亮而且很小,但是速度非常慢。我不知道为什么会这样。为什么那些迭代器这么慢?
使用 memcpy()
对于这个问题,我收到了我应该使用 memcpy() 的评论,因为它是最快的本机方法。但是如何将 memcpy() 与字符串和 ifstream 对象一起使用?ifstream 不应该使用自己的读取功能吗?为什么使用 memcpy() 会破坏可移植性?我正在寻找与 VS2010 以及 GCC 兼容的解决方案。为什么 memcpy() 不能与这些一起使用?
+ 还有其他有效的方法吗?
对于小于 10 MB 的小二进制文件,您推荐什么,我使用什么外壳?
(我不想将这个问题分成几部分,因为我对如何将 ifstream 读入字符串的不同方式之间的比较更感兴趣)