2013-07-23 64 views
0

蔭經歷了一本書上應用C++二進制字符串執行++

二進制字符串類是需要收集和數據的二進制maniputlate流 。這些數據流可以表示任何從圖像 數據到對象的內容。這裏的作者還提到它就像是對象流或對象持久性 。

作者是什麼意思的對象流。任何人都可以給我一個關於如何編寫二進制字符串類的簡單示例。

感謝您的時間和幫助。

+0

這不就是'fstream'已經是什麼了嗎? –

+0

查找'serialization'而不是'object streaming' – SomeWittyUsername

+0

@CarlNorum:fstream如何與對象持久性相關 – venkysmarty

回答

1

需要二進制字符串類來收集和操作二進制數據流。

這實際上意味着字符串(或流)可以包含任意數量的元素(二進制數據;位),它們可以表示任何內容,您可以使用該類來更改這些元素。

這些數據流可以代表從圖像數據到對象內容的任何內容。

你可以使用任何你想要的流(通常只限於實現)。例如,您可以將原始圖像數據加載到流對象中,然後讀取單個字節。您還可以將單個字符寫入流(或數組)並將其保存爲原始圖像數據。元素字符串/流不限制您對任何單個解釋。相反,實際的實現/接口定義了這個部分。

這裏作者還提到它就像對象流或對象持久性。

「對象流」在這裏指的是轉移的東西。例如。通過網絡或端口發送數據(例如,將其用作發送或接收數據的緩衝區)。「對象持久性」是指即使程序不再運行(加載/保存),也可以保留一些東西(讓它持久存在)。


從本質上講,幾乎所有的流以及在STL提供的容器已經是作者認爲一個二進制字符串。差別只是分組,例如你能夠訪問/讀/寫單個位或只是字節/文字/任何?

要獲得真正的「比特流」,您可以使用一些簡單的東西,如std::vector<bool>。這允許你存儲布爾值,但是你也可以將它們看作不同的東西(例如通過將內容轉換爲整數數組來逐塊讀取它們)。

但是我想說一件簡單的事情,std::stream甚至可以更好地匹配作者的描述:它可以用來保存持久性數據,它可以用來傳輸數據,它可以用來存儲/加載數據以不同的格式/解釋。例如,您可以編寫單個位或字節,稍後將其作爲整數或甚至字符串讀取。

+0

Nitpick:[用std :: stream]「你可以寫單個位或字節」 - 不行 - 它們以字符/字節爲單位進行操作,當然你可以傳送一個字節,其中只有一位是意義。乾杯 –

0

作者是什麼意思的對象流。

它們是指從程序的一部分發送編碼對象值的輸出,以便接收代碼可以構造具有相同值的對象。這幾乎就像持久​​性(例如,將對象保存到磁盤,以便稍後可以加載它),除了數據不一定放置在某個持久性的位置(因此如果關閉電源可能會丟失),但它會到達其他位置代碼可以立即有效地完成重新加載步驟。

例如,沒有生產水平的錯誤檢查:

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,它可以處理二進制數據。

+0

儘管'std :: string'確實可以處理二進制數據,但爲了語義上的原因,我更喜歡使用'std :: vector <[unsigned] char>'來執行任務,併爲文本內容保留'std :: string'。 –

+0

@MatthieuM:值得注意的是,有不少人分享你的偏好;我個人經常傾向於'std :: string',因爲它立即傳遞連續的*單字節*存儲,而使用'vector'我必須注意數據類型,並且它(有爭議的)有一個更豐富的接口讓我做更多使用成員函數(恕我直言閱讀更好,更容易在大多數IDE中查找/使用)。 –