我將讀取和寫入大型二進制文件的大塊。在C++中操作Blob
是否有標準C++或即將推出的標準C++或即將推出的標準C++ + boost的類,這將使我的任務更容易?
如果不是這樣可以使用字符串類呢?這樣做的危險是什麼? PS:一些觀察,將澄清事情。我預計blob將會被傳遞很多,所以引用計數和CoW的容器可能會更可取。
此外,我對使用字符串類的抵制是雙重的:這些是blob,而不是字符串,「不可打印的字符」,尤其是空值可能會導致出現困難。
我將讀取和寫入大型二進制文件的大塊。在C++中操作Blob
是否有標準C++或即將推出的標準C++或即將推出的標準C++ + boost的類,這將使我的任務更容易?
如果不是這樣可以使用字符串類呢?這樣做的危險是什麼? PS:一些觀察,將澄清事情。我預計blob將會被傳遞很多,所以引用計數和CoW的容器可能會更可取。
此外,我對使用字符串類的抵制是雙重的:這些是blob,而不是字符串,「不可打印的字符」,尤其是空值可能會導致出現困難。
如果你有一個二進制數據blob,你可以很容易和有效地將它存儲在std::vector<unsigned char>
。
如果您通過調用reserve
知道(或猜測)blob的大小,則可以提高性能。
最後,如果您使用流,您可以使用std::back_inserter
輕鬆讀取矢量。
根據你想要做什麼,內存映射文件such as the one from boost可能是一個很好的起點。對於內存修改,像其他人所建議的那樣使用std :: vector。
不要擔心CoW--它在C++世界中大多被忽視,除了Qt中的所有內容。
有 - 'unsigned char *'。還有什麼你需要從一個blob? – alxx 2012-04-05 06:21:13
@JeremyFriesner對於'std :: string'不是這樣;只有調用'c_str()'並將其明確地視爲C風格的字符串纔是真實的。 – 2012-04-05 06:23:20
@JohnCalsbeek我坐正確的,謝謝:) – 2012-04-05 06:30:05