提升序列化。意外的异常

时间:2013-11-10 22:01:09

标签: c++ serialization boost

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

0 个答案:

没有答案