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