2012-04-05 174 views
0

我将读取和写入大型二进制文件的大块。在C++中操作Blob

是否有标准C++或即将推出的标准C++或即将推出的标准C++ + boost的类,这将使我的任务更容易?

如果不是这样可以使用字符串类呢?这样做的危险是什么? PS:一些观察,将澄清事情。我预计blob将会被传递很多,所以引用计数和CoW的容器可能会更可取。

此外,我对使用字符串类的抵制是双重的:这些是​​blob,而不是字符串,“不可打印的字符”,尤其是空值可能会导致出现困难。

+4

有 - 'unsigned char *'。还有什么你需要从一个blob? – alxx 2012-04-05 06:21:13

+0

@JeremyFriesner对于'std :: string'不是这样;只有调用'c_str()'并将其明确地视为C风格的字符串才是真实的。 – 2012-04-05 06:23:20

+0

@JohnCalsbeek我坐正确的,谢谢:) – 2012-04-05 06:30:05

回答

1

如果你有一个二进制数据blob,你可以很容易和有效地将它存储在std::vector<unsigned char>

如果您通过调用reserve知道(或猜测)blob的大小,则可以提高性能。

最后,如果您使用流,您可以使用std::back_inserter轻松读取矢量。

+0

“保留”,而不是“反向” – SigTerm 2012-04-05 08:00:47

+0

@SigTerm:woops,固定:) – orlp 2012-04-05 09:02:17

0

根据你想要做什么,内存映射文件such as the one from boost可能是一个很好的起点。对于内存修改,像其他人所建议的那样使用std :: vector。

不要担心CoW--它在C++世界中大多被忽视,除了Qt中的所有内容。