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)
);
我该如何解决?
或者如果有完整的字节流实现,我很高兴熟悉它们。
我将使用msvc在VS中编译的应用程序中的序列化数据发送到使用Qt编译的应用程序。这就是原因。如何修复错误的反序列化?
我尝试在VS中使用所有Struct成员对齐。它没有帮助。在QtCreator中,我没有找到这样的选择。