2012-04-05 172 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中的所有內容。