簡體   English   中英

如何對二進制輸出使用升壓序列化?

[英]How to use boost serialization for binary output?

函數boost :: serialization :: binary_object(void * t,size_t size)和boost :: serialization :: make_binary_object(void * t,size_t size)之間的區別是什么?

我如何使用它們來獲取實際的輸出二進制文件?

歡迎來到!!

這是顯示如何使用它的示例。

#include <boost/archive/binary_oarchive.hpp>
#include <boost/archive/binary_iarchive.hpp>
#include <boost/serialization/binary_object.hpp>
#include <boost/serialization/serialization.hpp>
#include <iostream>
#include <sstream>

using boost::serialization::make_binary_object;

enum class Example : uint8_t {
    A = 1,
    B = 2,
};

int main() {

    std::stringstream stream;
    boost::archive::binary_oarchive ar(stream, boost::archive::no_header);

    auto data = Example::A;
    ar << make_binary_object(&data, sizeof(data));

    std::cout << "Size: " << stream.str().size() << "\n";
}

如果要將二進制對象保存在文件中,下面是一個將其保存在名為data.dat的文件中的示例。

#include <fstream>

using boost::serialization::make_binary_object;

enum class Example : uint8_t {
    A = 1,
    B = 2,
};

int main() {

    std::ofstream f("data.dat", std::ofstream::binary);
    boost::archive::binary_oarchive ar(f, boost::archive::no_header);

    auto data = Example::A;
    ar << make_binary_object(&data, sizeof(data));  
}

運行代碼后,文件看起來像這樣
data.dat文件

從@StoryTeller發布的boost源代碼注釋中
make_binary_object()只是一個小幫手,用於支持所有序列化包裝程序都遵循命名約定make_xxxxx的約定

boost::serialization::make_binary_object(void * t, size_t size)是一個助手,並調用boost::serialization::binary_object(void * t, size_t size) 提供了幫助程序以保留命名約定make_xxxxx

要將對象保存到二進制文件,您需要創建一個Archive並調用binary_object void save(Archive & ar, const unsigned int /* file_version */)方法

暫無
暫無

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

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