Если вы не знаете размер данных, которые вы отправляете заранее, это общий способ сериализации в std::string
:
// serialize obj into an std::string
std::string serial_str;
boost::iostreams::back_insert_device<std::string> inserter(serial_str);
boost::iostreams::stream<boost::iostreams::back_insert_device<std::string> > s(inserter);
boost::archive::binary_oarchive oa(s);
oa << obj;
// don't forget to flush the stream to finish writing into the buffer
s.flush();
// now you get to const char* with serial_str.data() or serial_str.c_str()
. Для десериализации используйте
* 1006.*
Это работает как талисман, я использую его для отправки данных с помощью MPI.
Это можно сделать очень быстро, если вы храните serial_str
в памяти и просто вызываете serial_str.clear()
перед вами.сериализовать в него.Это очищает данные, но не освобождает память, поэтому выделение не произойдет, если ваш следующий размер данных сериализации не требует этого.