class OByteStream
{
public:
explicit OByteStream(std::string &s)
: _backInsertDevice(s)
, _stream(_backInsertDevice)
, _oArchive(_stream)
{
}
void flush()
{
_stream.flush();
}
template<class T>
OByteStream &operator<<(const T &data)
{
_oArchive << data;
return *this;
}
private:
typedef boost::iostreams::back_insert_device<std::string> BackInsertDevice;
typedef boost::iostreams::stream<BackInsertDevice> Stream;
typedef boost::archive::binary_oarchive BinaryOArchive;
BackInsertDevice _backInsertDevice;
Stream _stream;
BinaryOArchive _oArchive;
};
class IByteStream
{
public:
explicit IByteStream(const std::string &s)
: _basicArraySource(s.data(), s.size())
, _stream(_basicArraySource)
, _iArchive(_stream)
{
}
template<class T>
IByteStream &operator>>(T &data)
{
_iArchive >> data;
return *this;
}
private:
typedef boost::iostreams::basic_array_source<char> BasicArraySource;
typedef boost::iostreams::stream<BasicArraySource> Stream;
typedef boost::archive::binary_iarchive BinaryIArchive;
BasicArraySource _basicArraySource;
Stream _stream;
BinaryIArchive _iArchive;
};
当我反序列化包含二维向量的结构时,我得到 input_stream_error。
if(scount != s)
boost::serialization::throw_exception(
archive_exception(archive_exception::input_stream_error)
);
我该如何解决?
或者,如果有字节流的完整实现,我很高兴熟悉它们。
我将序列化数据从在 VS 中编译的应用程序发送到使用 msvc 在 Qt 中编译的应用程序。这就是原因。如何修复不正确的反序列化?
我尝试在 VS 中使用所有结构成员对齐。它没有帮助。在 QtCreator 中我没有找到这样的选项。