我想爲我的代碼實現一個簡單的序列化/反序列化方法,以便能夠通過使用MPI的網絡傳遞一個對象。在理想的世界中,我會使用Boost.Serialization
和Boost.MPI
,但它們沒有安裝在我有權訪問的某些羣集上,所以我正在考慮自己這樣做。沒有Boost.Serialization的序列化
我的策略是將每個對象序列化爲一個std::stringstream
對象,然後通過MPI_Send
使用MPI_CHAR
作爲數據類型發送消息。在這種情況下,我會通過std::stringstream::str()::c_str()
作爲指針,並將std::streaingstream::str()::size()*sizeof(char)
作爲消息的大小。
我已經想通過如何序列化一切到一個std::stringstream
對象。我的反序列化方法也需要一個std::stringstream
對象並將所有事情反序列化。這工作正常,但我不知道如何從char
的數組中創建一個std::stringstream
對象,並避免從數組到數據流的額外副本。我應該改變我的反序列化方法,直接使用memcpy
來代替char
的數組嗎?
爲什麼不使用應用程序捆綁Boost的構建版本(僅剝離您所需的版本)?那麼你不必擔心重新發明輪子。 – Greyson 2012-08-15 19:13:10
看看這是否符合您的要求https://developers.google.com/protocol-buffers/docs/overview – user827992 2012-08-15 19:15:53
發送二進制值時,應該使用MPI_BYTE而不是MPI_CHAR來避免MPI庫進行任何可能的轉換。 – 2012-08-16 08:02:13