没有Boost.Serialization的序列化

时间:2012-08-15 19:09:48

标签: c++ serialization mpi

我正在尝试为我的代码实现一个简单的序列化/反序列化方法,以便能够使用MPI通过网络传递对象。在一个理想的世界中,我会使用Boost.SerializationBoost.MPI,但它们并没有安装在我可以访问的某些集群上,因此我正在考虑自己这样做。

我的策略是将每个对象序列化为std::stringstream对象,然后使用MPI_Send作为数据类型通过MPI_CHAR发送消息。在这种情况下,我会将std::stringstream::str()::c_str()作为指针,std::streaingstream::str()::size()*sizeof(char)作为消息的大小。

我已经想过如何将所有内容序列化为std::stringstream对象。我的反序列化方法也采用std::stringstream对象并反序列化所有内容。这工作正常,但我不知道如何从std::stringstream数组创建char对象,并避免从数组到流中的额外副本。我是否应该将我的反序列化方法更改为使用char直接使用memcpy数组?

2 个答案:

答案 0 :(得分:1)

MPI执行此操作的方法是使用MPI_PackMPI_Unpack。当然这是C,可能不像使用C ++功能那样方便。有关简单示例,请参阅http://www.mcs.anl.gov/research/projects/mpi/tutorial/mpiexmpl/src/bcast/C/pack/solution.html

答案 1 :(得分:0)

使用从istrstream数组中提取的char。标头为<strstream>。并且,是的,正式地它在C ++标准中被弃用了。委员会在其早期就沉迷于大量的一厢情愿的想法。 istrstream不会消失。