2017-07-10 47 views
0

我序列化比較大MatrixXf通過類似的代碼文件到這一點 - https://github.com/github188/vidy_old/blob/01c0aa4242299f7f1056edf0aa60b92177dfcfe6/3rdparty/openbr/core/eigenutils.h徵 - 如何創建最小的系列化MatrixXf

當我使用Qt這一點,取決於矩陣創建一個3-30MB文件。

如果節省空間是我的首要目標,我可以考慮做些什麼?

  1. 是否有另一種序列化形式,我期望看到更小的文件大小? (我可以嘗試提高,看看有什麼不同 - https://gist.github.com/ShigekiKarita/4db2b0ffb207322c1324
  2. 似乎序列化的矩陣可以壓縮一點,如果我可以生活在浮點精度的小數點以下,所以它不必存儲儘可能多在磁盤上。有誰知道這樣的技術?

謝謝你,

+0

你可以更具體的_當我這樣做使用Qt_?請提供您正在嘗試的源代碼。 – cbuchart

回答

0

獨立您使用的系列化,提升提供過濾流,這些工作完全像普通istreams和ostreams,但是在飛行中添加的壓縮。您可以簡單地將示例中的流替換爲已過濾的流,並且應該有工作壓縮。

http://www.boost.org/doc/libs/1_64_0/libs/iostreams/doc/classes/gzip.html

#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); 
} 
1

加速系列化,以壓縮在一起,使用升壓轉換器的過濾的iostream應該給你一個靈活的解決方案,以小的文件大小。

Boost序列化的binary_archive相當緊湊,並且允許文件版本化,這可以很方便。