Boost logo

Boost Users :

Subject: Re: [Boost-users] [archive] binary archive to memory stream
From: Sebastian Messerschmidt (sebastian.messerschmidt_at_[hidden])
Date: 2014-06-19 03:20:04


Hi Michael,

I've used something like this for

writing:

typedef std::vector<char> BufferType;
typedef
boost::iostreams::stream<boost::iostreams::back_insert_device<BufferType>>
OBufferStream;
typedef boost::archive::binary_oarchive OutArchive;

Buffertype my_data_array;
OBufferStream buffer_stream(my_data_array);
OutArchive archive(buffer_stream);

archive << ... //normal boost::serialization thing here

and reading:

typedef boost::iostreams::stream<boost::iostreams::basic_array_source
<char> > IBufferStream;
typedef boost::archive::binary_iarchive InArchive;

IBufferStream i_buffer_stream(&my_data_array[0], my_data_array.size());
InArchive i_archive(i_buffer_strea,)

archive << ... //normal boost::serialization thing here

This works fine at the cost of one copy of the array for reading, and
gives you the advantage of knowing the buffer size of the serialized data.
Note, the code is more or less out of the top of my head, so I cannot
guarantee it is compiling.

cheer
Sebastian

> Hello,
>
> I am wrapping my head around archive, specifically binary archive.
>
> I'd like to serialize a vector of objects in such a way, I need to
> capture intermediate vector buffers (literally, to vector of uint8_t)
> so that I can determine their sizes.
>
> After which point the parent object(s) can serialize to file using
> more conventional, built-in file streams and such.
>
> It seems that binary_oarchive is helpful, but still requires there be
> an ostream or streambuf in the mix. Which, as an adapter layer, while
> helpful, it still leaves the question of extending streambuf to work
> with ostream to vector<uint8_t> open.
>
> I've read some docs on vectors and streambuf, but they all seem to be
> geared towards a known-size vector, istream and such. I am interested
> in a vector that can be streamed to, will grow in size, etc. Some
> clues seem to hint at underflow, overflow type issues?
>
> Any helpful pointers how to go about doing this?
>
> Thanks...
>
> Best regards,
>
> Michael Powell
> _______________________________________________
> Boost-users mailing list
> Boost-users_at_[hidden]
> http://lists.boost.org/mailman/listinfo.cgi/boost-users


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net