簡體   English   中英

Boost序列化在32位和64位機器之間不起作用。 還有其他任何序列化/壓縮庫嗎?

[英]Boost serialization does not work between 32bit and 64bit machine. Any other serialization / compression library?

我正在嘗試使用boost庫在64位機器上進行序列化並在32位機器上進行反序列化。 但是,它似乎不起作用。 (我用1.57.0)。

如果我運行以下代碼

boost::asio::streambuf buf;
std::ostream os(&buf);
boost::archive::binary_oarchive oa(os);
printf("Buffer size %d\n",(int)buf.size());

32位機器的輸出是37位和64位機的輸出為41。

我可以使用其他任何好的序列化庫嗎? 麥片怎么樣?

如果庫也可以進行壓縮(zlib / gzip等),那就太棒了。

它確實有效。 它只是不創建兼容的檔案。 如果您需要,您應該查看EOS所做的存檔實現:

您可以直接替換Boost的binary_ [io]存檔。 無需改變任何其他內容。


PS。 當然,也可以用與架構無關的方式拼出你的類型。 所以uint32_t ,而不是``size_t`

如果更改機器的體系結構,boost :: serialization創建的二進制存檔將不起作用。 在這種情況下,文本存檔是一個很好的選擇。 Boost :: archive :: text_oarchive和boost :: archive :: text_iarchive可以使用完全相同的方式,但在架構和平台之間是安全的。 數據以ascii格式而不是二進制格式寫入,因此需要在那里進行權衡以達到您的目的。

為了這個目的,我建議使用'cereal'來提供JSON / XML序列化。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM