C++ 如何创建最小的序列化矩阵

C++ 如何创建最小的序列化矩阵,c++,qt,serialization,eigen,C++,Qt,Serialization,Eigen,我正在通过类似的代码将相对较大的MatrixXf序列化为文件-- 当我使用Qt执行此操作时,它会根据矩阵创建一个3-30MB的文件 如果节省空间是我的1个目标,我能考虑做些什么?< /P> 是否有其他形式的序列化,我希望看到更小的文件大小?(我可以试着看看这有什么不同-) 如果我能接受更少的浮点精度小数位数,那么序列化矩阵似乎可以压缩一点,这样它就不必在磁盘上存储那么多。有人知道这种技术吗 谢谢你 Rao与您正在使用的序列化无关,boost提供了过滤流,其工作方式与常规的iStream和Ostr

我正在通过类似的代码将相对较大的MatrixXf序列化为文件--

当我使用Qt执行此操作时,它会根据矩阵创建一个3-30MB的文件

如果节省空间是我的1个目标,我能考虑做些什么?< /P>
  • 是否有其他形式的序列化,我希望看到更小的文件大小?(我可以试着看看这有什么不同-)
  • 如果我能接受更少的浮点精度小数位数,那么序列化矩阵似乎可以压缩一点,这样它就不必在磁盘上存储那么多。有人知道这种技术吗
  • 谢谢你


    Rao

    与您正在使用的序列化无关,boost提供了过滤流,其工作方式与常规的iStream和Ostream完全相同,但会动态添加压缩。您可以简单地将示例中的流替换为经过过滤的流,并且应该具有有效的压缩

    #包括
    #包括
    #包括
    #包括
    #包括
    int main()
    {
    使用名称空间std;
    ifstream文件(“hello.gz”,ios_base::in | ios_base::binary);
    过滤_streambuf in;
    in.push(gzip_decompressor());
    in.push(文件);
    boost::iostreams::copy(in,cout);
    }
    
    使用Boost的iostream过滤的Boost序列化和压缩应该可以为您提供一个灵活的解决方案,文件大小较小


    Boost序列化的二进制归档文件非常紧凑,并且允许文件版本控制,这非常方便。

    您能否更具体地说明我何时使用Qt执行此操作?请提供您正在尝试的源代码。
    #include <fstream>
    #include <iostream>
    #include <boost/iostreams/filtering_streambuf.hpp>
    #include <boost/iostreams/copy.hpp>
    #include <boost/iostreams/filter/gzip.hpp>
    
    int main() 
    {
        using namespace std;
    
        ifstream file("hello.gz", ios_base::in | ios_base::binary);
        filtering_streambuf<input> in;
        in.push(gzip_decompressor());
        in.push(file);
        boost::iostreams::copy(in, cout);
    }