蔭經歷了一本書上應用C++二進制字符串執行++
二進制字符串類是需要收集和數據的二進制maniputlate流 。這些數據流可以表示任何從圖像 數據到對象的內容。這裏的作者還提到它就像是對象流或對象持久性 。
作者是什麼意思的對象流。任何人都可以給我一個關於如何編寫二進制字符串類的簡單示例。
感謝您的時間和幫助。
蔭經歷了一本書上應用C++二進制字符串執行++
二進制字符串類是需要收集和數據的二進制maniputlate流 。這些數據流可以表示任何從圖像 數據到對象的內容。這裏的作者還提到它就像是對象流或對象持久性 。
作者是什麼意思的對象流。任何人都可以給我一個關於如何編寫二進制字符串類的簡單示例。
感謝您的時間和幫助。
需要二進制字符串類來收集和操作二進制數據流。
這實際上意味着字符串(或流)可以包含任意數量的元素(二進制數據;位),它們可以表示任何內容,您可以使用該類來更改這些元素。
這些數據流可以代表從圖像數據到對象內容的任何內容。
你可以使用任何你想要的流(通常只限於實現)。例如,您可以將原始圖像數據加載到流對象中,然後讀取單個字節。您還可以將單個字符寫入流(或數組)並將其保存爲原始圖像數據。元素字符串/流不限制您對任何單個解釋。相反,實際的實現/接口定義了這個部分。
這裏作者還提到它就像對象流或對象持久性。
「對象流」在這裏指的是轉移的東西。例如。通過網絡或端口發送數據(例如,將其用作發送或接收數據的緩衝區)。「對象持久性」是指即使程序不再運行(加載/保存),也可以保留一些東西(讓它持久存在)。
從本質上講,幾乎所有的流以及在STL提供的容器已經是作者認爲一個二進制字符串。差別只是分組,例如你能夠訪問/讀/寫單個位或只是字節/文字/任何?
要獲得真正的「比特流」,您可以使用一些簡單的東西,如std::vector<bool>
。這允許你存儲布爾值,但是你也可以將它們看作不同的東西(例如通過將內容轉換爲整數數組來逐塊讀取它們)。
但是我想說一件簡單的事情,std::stream
甚至可以更好地匹配作者的描述:它可以用來保存持久性數據,它可以用來傳輸數據,它可以用來存儲/加載數據以不同的格式/解釋。例如,您可以編寫單個位或字節,稍後將其作爲整數或甚至字符串讀取。
Nitpick:[用std :: stream]「你可以寫單個位或字節」 - 不行 - 它們以字符/字節爲單位進行操作,當然你可以傳送一個字節,其中只有一位是意義。乾杯 –
作者是什麼意思的對象流。
它們是指從程序的一部分發送編碼對象值的輸出,以便接收代碼可以構造具有相同值的對象。這幾乎就像持久性(例如,將對象保存到磁盤,以便稍後可以加載它),除了數據不一定放置在某個持久性的位置(因此如果關閉電源可能會丟失),但它會到達其他位置代碼可以立即有效地完成重新加載步驟。
例如,沒有生產水平的錯誤檢查:
struct X { int a; int b; };
std::ostream& operator<<(std::ostream& os, const X& x)
{ return os << x.a << ' ' << x.b; }
std::istream& operator>>(std::istream& is, X& x)
{ return is >> x.a >> x.b; }
X x1 = ...;
std::istringstream iss;
iss << x1;
X x2;
if (iss >> x)
assert(x2 == x1);
任何一個可以給我怎樣才能寫出二進制字符串類簡單的例子。
您不必......標準包含std::string
,它可以處理二進制數據。
儘管'std :: string'確實可以處理二進制數據,但爲了語義上的原因,我更喜歡使用'std :: vector <[unsigned] char>'來執行任務,併爲文本內容保留'std :: string'。 –
@MatthieuM:值得注意的是,有不少人分享你的偏好;我個人經常傾向於'std :: string',因爲它立即傳遞連續的*單字節*存儲,而使用'vector'我必須注意數據類型,並且它(有爭議的)有一個更豐富的接口讓我做更多使用成員函數(恕我直言閱讀更好,更容易在大多數IDE中查找/使用)。 –
這不就是'fstream'已經是什麼了嗎? –
查找'serialization'而不是'object streaming' – SomeWittyUsername
@CarlNorum:fstream如何與對象持久性相關 – venkysmarty