资源简介
这个源码很不好早,,在此提供给大家参考和使用
代码片段和文件信息
// LZ4 streaming API example : double buffer
// Copyright : Takayuki Matsuoka
#define _CRT_SECURE_NO_WARNINGS // for MSVC
#include “lz4.h“
#include
#include
#include
#include
enum {
BLOCK_BYTES = 1024 * 8
// BLOCK_BYTES = 1024 * 64
};
size_t write_int(FILE* fp int i) {
return fwrite(&i sizeof(i) 1 fp);
}
size_t write_bin(FILE* fp const void* array size_t arrayBytes) {
return fwrite(array 1 arrayBytes fp);
}
size_t read_int(FILE* fp int* i) {
return fread(i sizeof(*i) 1 fp);
}
size_t read_bin(FILE* fp void* array size_t arrayBytes) {
return fread(array 1 arrayBytes fp);
}
void test_compress(FILE* outFp FILE* inpFp)
{
LZ4_stream_t lz4Stream_body = { 0 };
LZ4_stream_t* lz4Stream = &lz4Stream_body;
char inpBuf[2][BLOCK_BYTES];
int inpBufIndex = 0;
for(;;) {
char* const inpPtr = inpBuf[inpBufIndex];
const int inpBytes = (int) read_bin(inpFp inpPtr BLOCK_BYTES);
if(0 == inpBytes) {
break;
}
{
char cmpBuf[LZ4_COMPRESSBOUND(BLOCK_BYTES)];
const int cmpBytes = LZ4_compress_continue(
lz4Stream inpPtr cmpBuf inpBytes);
if(cmpBytes <= 0) {
break;
}
write_int(outFp cmpBytes);
write_bin(outFp cmpBuf (size_t) cmpBytes);
}
inpBufIndex = (inpBufIndex + 1) % 2;
}
write_int(outFp 0);
}
void test_decompress(FILE* outFp FILE* inpFp)
{
LZ4_streamDecode_t lz4StreamDecode_body = { 0 };
LZ4_streamDecode_t* lz4StreamDecode = &lz4StreamDecode_body;
char decBuf[2][BLOCK_BYTES];
int decBufIndex = 0;
for(;;) {
char cmpBuf[LZ4_COMPRESSBOUND(BLOCK_BYTES)];
int cmpBytes = 0;
{
const size_t readCount0 = read_int(inpFp &cmpBytes);
if(readCount0 != 1 || cmpBytes <= 0) {
break;
}
const size_t readCount1 = read_bin(inpFp cmpBuf (size_t) cmpBytes);
if(readCount1 != (size_t) cmpBytes) {
break;
}
}
{
char* const decPtr = decBuf[decBufIndex];
const int decBytes = LZ4_decompress_safe_continue(
lz4StreamDecode cmpBuf decPtr cmpBytes BLOCK_BYTES);
if(decBytes <= 0) {
break;
}
write_bin(outFp decPtr (size_t) decBytes);
}
decBufIndex = (decBufIndex + 1) % 2;
}
}
int compare(FILE* fp0 FILE* fp1)
{
int result = 0;
while(0 == result) {
char b0[65536];
char b1[65536];
const size_t r0 = read_bin(fp0 b0 sizeof(b0));
const size_t r1 = read_bin(fp1 b1 sizeof(b1));
result = (int) r0 - (int) r1;
if(0 == r0 || 0 == r1) {
break;
}
if(0 == result) {
result = memcmp(b0 b1 r0);
}
}
return
- 上一篇:HMC5883L 模块的源代码和电路图
- 下一篇:华东理工大学工程实践报告
相关资源
- 道格拉斯曲线矢量数据压缩算法
- 基于FPGA的压缩算法 压缩比1:2里有全
- 去斜脉冲压缩算法研究
- lz4格式解压软件 x86和x64三星线刷包里
- 文件压缩算法比较经典的几种
- DTLZ1、DTLZ2、DTLZ3、DTLZ4、DTLZ5、DTLZ6、
- 霍夫曼图像压缩算法
- 语音压缩算法,比较简单
- 图像jpeg压缩算法介绍及其源码
- 几种常见压缩算法
- google snappy 压缩算法 源码dll 及delphi
- 利用Opencv较高效率的视频图像传输
- 基于QT的MP3压缩算法
- 用LZW压缩算法实现的编码与解码
- 一种基于视觉熵的图像分割压缩算法
- 高效率浪涌保护
- STM32移植 MINI LZO2.09压缩算法
- 高效率IOCP的UDP通信服务端
- HDR图像压缩算法比较研究
- jbig银联用的图片压缩算法
评论
共有 条评论