原創:
注:靜態庫只需要編譯zlibstat, dll只需要編譯zlibvc
4.建立新的工程包含 「msgpack.hpp」 和 「zlib.h」 新增前面的生成的兩個lib
嘗試使用msgpack的壓縮類zbuffer,在msgpack.hpp檔案裡面新增 #include 「msgpack/zbuffer.hpp」 和#include 「msgpack/zbuffer.h」
實測序列化壓縮可以,沒找到解壓還原的方法…尷尬
最後採用sbuffer類
pack->壓縮->二進位制儲存
二進位制讀取->解壓縮->upack
貼**:
#include "stdafx.h"
#include "zlib.h"
#include "iostream"
#include "msgpack.hpp"
#include "fstream"
using
namespace
std;
unsigned
char src[999999];
unsigned
char strdst[999999];
unsigned
char buf[999999];
int main()
//序列化完成
// std::ofstream of_2("t2.dat",std::ios::binary);
// of_2.write(buffer_.data(),buffer_.size());
// of_2.close();
std::ofstream of_("t1.dat",std::ios::binary);
unsigned
char *p=new
unsigned
char[buffer_.size()+1];
cout
long buflen = sizeof(buf);
memcpy(p,buffer_.data(),buffer_.size());
compress(buf, &buflen,p,buffer_.size());壓縮完成
of_.write((const
char*)buf,buflen);
of_.close();//寫資料完成
delete p;
buffer_.release();
std::ifstream is("1.dat",std::ios::binary);//讀資料
is.seekg (0, is.end);
int n = is.tellg();
is.seekg (0, is.beg);
char *pp=new
char[n+1];
is.read((char*)pp, n);
msgpack::unpacker unpack_;
memcpy(src,pp,n);
unsigned
long dstlen = sizeof(strdst);
int nu = uncompress(strdst, &dstlen, src, n);//解壓
unpack_.reserve_buffer(dstlen);
memcpy(unpack_.buffer(),strdst,dstlen);
unpack_.buffer_consumed(dstlen);
msgpack::unpacked result_;//unpack
while (unpack_.next(result_))
system("pause");
return
0;}
注:引入zlib庫在編譯工程時候要新增預處理 zlib_winapi
報錯error lnk2026: 模組對於 safeseh 映像是不安全的,解決辦法在工程配置屬性,配置屬性,聯結器,命令列新增「/safeseh:no 」
測試至此做個記錄。
原創:
zlib(非流壓縮)
wget tar xvzf zlib 1.2.3.tar.gz cd zlib 1.2.3.tar.gz configure make sudo make install安裝好之後,就可以用了 zlibmgr.h 檔案 ifndef zlibmgr define zlibmgr define max...
C 工程下使用zlib壓縮演算法
c 使用zlib壓縮演算法。2.雙擊 src zlib 1.2.3 zlib 1.2.3 projects visualc6 zlib.dsw用vs開啟 3.用lib release對zlib工程進行編譯 如需要改變編譯選項,則需要與要包含此lib的工程的編譯選項一致 4.編譯時有可能報錯,建立檔案...
PHP使用zlib實現頁面的gzip壓縮輸出
php中的gzip gnu zip 是一種壓縮技術。經過gzip壓縮後頁面大小可以變為原來的30 甚至更小。這樣使用者瀏覽的時候就會感覺很快。要實現gzip壓縮頁面需要瀏覽器和 伺服器共同支援,實際上就是伺服器壓縮,傳到瀏覽器後瀏覽器解壓並解析。瀏覽器那邊不需要我們擔心,因為現在絕大多數瀏覽器都支援...