2012-04-08 45 views
0

我理解數據結構對齊的理論,並用這個理論來實現序列化。 但是,我很難開始真正的代碼。 有人可以給我一個簡單的例子來說明這是如何工作的?在C++中實現序列化的數據結構對齊

比方說:

Class A { 
    private: 
    int a; 
    char b; 
    double c; 
    char d; 
    char e; 
    public: 
    void serialize(char * str); 
}; 

如何實現序列化方法來存儲數據對齊一個?我應該重新排序數據結構並填充它嗎?或...

+1

內存中數據對齊和序列化是兩個正交的方面。事實上,一旦數據被序列化爲一個字節流,對齊就不再是一個問題。 – mavam 2012-04-08 19:19:11

+1

@MatthiasVallentin請在有人提議使用'memcpy'或某些類似功能之前將您的評論轉換爲答案。 – Andre 2012-04-08 19:32:09

+0

您可能會檢查Google協議緩衝區:http://code.google.com/p/protobuf/,而不是自己的序列化,這將爲您處理很多細節,「正確的方式」。 – 2012-04-08 21:08:14

回答

1

對齊和序列化是兩個正交的方面。

前者涉及數據結構的內存中表示,而後者涉及其順序形式的等價表示。換句話說,一旦數據結構被序列化爲一個字節流,對齊就不再相關。類似地,當引用串行化字節流時,對齊的概念沒有意義。

這就是說,你應該分別解決每個問題,而不是試圖找到一個聯合解決方案。

+0

這個想法是,我們首先需要對齊數據結構,以獲得一個小尺寸(數據結構)。然後,使用memcpy()將值傳遞給char *。這樣,就可以將緩衝區發送出去。 – satellite 2012-04-08 20:04:39

+0

如果您打算以任何方式共享序列化的結構體(例如,通過網絡發送它,將其寫入其他機器可能讀取的文件),您將遇到'memcpy'方法的麻煩。對齊然後成爲許多問題之一,例如,你也必須考慮字節順序。這不是應該如何序列化數據結構。 (@Andre暗示已經發表評論。) – mavam 2012-04-08 20:14:45