0
    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 中我没有找到这样的选项。

4

0 回答 0