Snappy压缩库安装和使用之二
来源:互联网 发布:攻击路由器软件 编辑:程序博客网 时间:2024/06/05 08:34
下面给出一个使用实例:
testsnappy.cpp
#include <iostream>#include <string>#include <unistd.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <cstring>#include <cstdlib>#include <errno.h>#include "spfs_communication.h"#include <snappy.h>#include "file.h"using namespace std;#define BUF_SIZE 4*1024#define COM_FILE_NAME "/home/luoxiongwei/testsnappy/snappy-1.0.5.tar"#define UNCOM_FILE_NAME "/home/luoxiongwei/testsnappy/s.snappy"int main(){ //首先压缩 /*string instr; File::ReadFileToStringOrDie(COM_FILE_NAME,&instr); string outstr;int w_fd=open(UNCOM_FILE_NAME,O_WRONLY|O_CREAT,S_IRWXU|S_IRWXG);close(w_fd);snappy::Compress(instr.data(),instr.size(),&outstr); File::WriteStringToFileOrDie(outstr,UNCOM_FILE_NAME);*///解压string instr; File::ReadFileToStringOrDie(UNCOM_FILE_NAME,&instr); string outstr;int w_fd=open(COM_FILE_NAME,O_WRONLY|O_CREAT,S_IRWXU|S_IRWXG);close(w_fd);snappy::Uncompress(instr.data(),instr.size(),&outstr); File::WriteStringToFileOrDie(outstr,COM_FILE_NAME);return 0;}
file.h
#include <string>#include <cstring>using std::string;namespace File{ void ReadFileToStringOrDie(const char* filename, string* data); void ReadFileToStringOrDie(const string& filename, string* data); void WriteStringToFileOrDie(const string& str, const char* filename);}
file.cpp
#include "file.h"#include <cstdio>#include <cstdlib>namespace File{ void ReadFileToStringOrDie(const char* filename, string* data) { FILE* fp = fopen(filename, "rb"); if (fp == NULL) { perror(filename); exit(1); } data->clear(); while (!feof(fp)) { char buf[4096]; size_t ret = fread(buf, 1, 4096, fp); if (ret == 0 && ferror(fp)) { perror("fread"); exit(1); } data->append(string(buf, ret)); } fclose(fp); } void ReadFileToStringOrDie(const string& filename, string* data) { ReadFileToStringOrDie(filename.c_str(), data); } void WriteStringToFileOrDie(const string& str, const char* filename) { FILE* fp = fopen(filename, "wb"); if (fp == NULL) { perror(filename); exit(1); } int ret = fwrite(str.data(), str.size(), 1, fp); if (ret != 1) { perror("fwrite"); exit(1); } fclose(fp); }}
(4)性能比较
只测试了文本文件压缩。Snappy压缩使用的程序为上面的示例,bzip2和gzip为Linux命令。
4.1压缩性能比较:
4.2 解压缩性能比较:
(五)一个疑问
我上面的测试代码都是将整个文件读入内存之后进行压缩/解压缩操作。我也曾经尝试利用下面的代码去处理大文件,但是解压缩没有成功。
#include <iostream>#include <string>#include <unistd.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <cstring>#include <cstdlib>#include <errno.h>#include "spfs_communication.h"#include <snappy.h>using namespace std;#define BUF_SIZE 4*1024#define COM_FILE_NAME "/home/luoxiongwei/testsnappy/snappy-1.0.5.tar"#define UNCOM_FILE_NAME "/home/luoxiongwei/testsnappy/s.snappy"int main(){int r_fd=open(COM_FILE_NAME,O_RDONLY);int w_fd=open(UNCOM_FILE_NAME,O_WRONLY|O_CREAT,S_IRWXU|S_IRWXG); char buf[BUF_SIZE]={'\0'}; string outstr;while(read_pack(r_fd,buf,sizeof(buf))>0){string instr(buf); memset(buf,'\0',sizeof(buf));snappy::Compress(instr.data(), instr.size(), &outstr);write_pack(w_fd,outstr.c_str(),outstr.size());}close(r_fd);close(w_fd);return 0;}
我的疑问是,如何使用snappy操作大文件呢?
- Snappy压缩库安装和使用之二
- Snappy压缩库安装和使用之一
- Snappy压缩库安装和使用之一
- python使用snappy压缩
- JAVA代码之Snappy 压缩
- snappy压缩
- Snappy压缩
- hbase压缩算法-Snappy算法安装
- hadoop,hbase,hive 安装snappy压缩
- hbase压缩算法-Snappy算法安装
- Hadoop2.6.0 Snappy 压缩安装与配置
- java,go语言 压缩 snappy 的使用
- OceanBase中的压缩库 -- snappy,lzo,none
- Snappy安装
- hadoop2.2支持snappy压缩安装及配置
- hive 存储格式和压缩方式 一:Snappy + SequenceFile
- Hadoop列式存储引擎Parquet/ORC和snappy压缩
- Hadoop列式存储引擎Parquet/ORC和snappy压缩
- 端口扫描程序nmap使用手册
- 13-01-20-->5
- Mysql数据库修改字段方法总结
- UVA 10911 Forming Quiz Teams
- [转载]LaTex技巧
- Snappy压缩库安装和使用之二
- 数据库相关的网址
- 关于对java异步编程的思考。
- 【BZOJ1014】[JSOI2008]火星人prefix
- QT浏览目录打开文件
- Action的详解
- 个sevlet实现文件上传
- ActionForm的详解
- javascript基于对象编程基础