关于C++类库KYLib: 固定缓冲区的压缩/解压缩类源码

博客分享了KYLib中固定缓冲区的压缩和解压缩类源码,适用于网络数据包的高效压缩。该算法特点是速度快、压缩率适中,确保压缩后数据缓冲区可控。
摘要由CSDN通过智能技术生成

固定缓冲区的压缩/解压缩类源码及测试例子: http://download.csdn.net/detail/kyee/5052133

固定缓冲区的压缩/解压缩算法,适用于网络传输数据包的压缩,具有压缩速度快、压缩率适中特点,而且压缩后数据缓冲区可控。

其中包含固定缓冲区的压缩类(TKYFixedPack)和解压缩类(TKYFixedUnpack),源码如下:

// =======================================
// Unit   : 固定缓冲区的压缩/解压缩单元
// Version: 3.0.0.0 (build 2012.04.19)
// Author : Kyee Ye
// Email  : kyee_ye(at)126.com
// Copyright (C) Kyee workroom
// =======================================

#ifndef _KYFixedPack_H_
#define _KYFixedPack_H_

#include "KYPackObj.h"

namespace KYLib
{

// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

/* TKYFixedPack - 固定缓冲区的压缩类(基于LZ压缩算法) */

class TKYFixedPack
{
public:
   TKYFixedPack();
   virtual ~TKYFixedPack();

   // 属性
   char*          Dest() const         { return FDest; }       // default: NULL
   Word           Size() const         { return FSize; }       // default: 0
   Word           MaxSize() const      { return FMaxSize; }    // default: 0
   Longword       DataSize() const     { return FDataSize; }   // default: 0
   bool           IsPacking() const    { return FIsPacking; }  // default: false

   // 设置压缩结果缓冲区的最大尺寸
   bool           SetMaxSize(Word ASize);

   // 重置
   void           Reset();

   // 压缩缓冲区
   bool           Pack(const char* ABuffer, long ASize, Word AMax = 0xFFFF);

private:
   void           DoCopy(const char* ABuffer, long ASize);
   bool           DoMatch(Byte* APos, Byte* AEnd, Word& AOffset, Byte& ADepth);

private:
   char           FContext[1024];      // 压缩数据的上下文
   Word           FHash[4096];         // 哈希表
   char*          FDest;               // 压缩后的缓冲区
   Word           FSize;               // 压缩后数据尺寸
   Word           FMaxSize;            // 缓冲区最大尺寸
   Longword       FDataSize;           // 总压缩数据尺寸
   Longword       FLastSize;           // 上一次 pack 结束后的尺寸
   Byte           FBitBegin;           // 第一个字节数据开始位
   bool           FIsPacking;          // 判断是否正在压缩

private:
   // 编码项
   typedef struct
   {
      Byte        Length;              // 编码位数
      char        Bits[3];             // 编码
   } TCode, *PCode;

private:
   // 初始化深度和偏移量的静态编码表
   static void    _Init_Depth_Codes(TCode* ACodes, const Byte* ABase,
                               const Byte* ASuffix,      Byte  AHigh);
   static void    _Init_Offset_Codes();

private:
   // 深度和偏移量的静态编码表
   static TCode   _Codes_Depth[256];
   static TCode   _Codes_Offset[1024];

   // TKYFixedPack 的静态成员初始化类
   static class TInitialization
   {
   public:
      TInitialization();
      ~TInitialization();
   } _Initialization;

   friend class TInitialization;
};

// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

/* TKYFixedUnpack - 固定缓冲区的解压缩类(基于LZ压缩算法) */

class TKYFixedUnpack
{
public:
   // 解压缩缓冲区
   // 1. ABuffer 存放 ASize 字节的已压缩数据
   // 2. ADest   存放解压缩后的数据, ADestSize >= ASize
   // 3. 若返回值 > 0 表示解压缩后数据的尺寸
   // 4. 若返回值为 0 表示解压缩失败, 可能 ADestSize 太小或数据未压缩
   // 5. 若返回值为 -1 表示参数不合法
   // 6. 若返回值为 -2 表示解压缩失败, 原因是数据已损坏
   static long    Unpack(const char* ABuffer, long ASize,
                               char* ADest,   long ADestSize);

};

}

#endif

// =======================================
// Unit   : 固定缓冲区的压缩/解压缩单元
// Version: 3.0.0.0 (build 2012.04.19)
// Author : Kyee Ye
// Email  : kyee_ye(at)126.com
// Copyright (C) Kyee workroom
// =======================================

#include "KYFixedPack.h"

namespace KYLib
{

// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

/* 深度和偏移量编码操作的相关静态函数 */

// 常量
#define Max_Depth             258      // 最大匹配深度
#define Max_Offset           1024      // 最大偏移量
#define Mask_Index         0x7FFF      // 索引的掩码
#define Mask_Hash          0x0FFF      // 哈希的掩码
#define Hash_RandomGene     45673      // 哈希的随机因子必须是素数,
                                       // 且除以 4096 的商和余数也是素数

// 深度的编码
#define High_Depth              8      // 后缀的最高项数

// 偏移量的编码
#define Prefix_Offset           4      // 偏移量的前缀位数
#define High_Offset            15      // = 2^Prefix_Offset - 1

// 前缀码的位值
static const Byte Bits_Prefix[8] = {0xFF, 0x7F, 0x3F, 0x1F, 0x0F, 0x07, 0x03, 0x01};

// 高位与模值
static const Byte Bits_HiAnd[8]  = {0x00, 0x80, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC, 0xFE};

// 布尔位值
static const Byte Bits_Bool[8]   = {0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01};

// 深度前缀编码的基数
static const Byte _D_Base[9]     = {0,    2,    4,    8,   12,   20,   36,   68,
                                  132};

// 深度前缀编码的后缀位数
static const Byte _D_Bits[9]     = {1,    1,    2,    2,    3,    4,    5,    6,
                                    7};

// 偏移量前缀编码的基数
static const Word _O_Base[16]    = {0,    1,    2,    3,    4,    6,    8,   12,
                                   16,   24,   32,   4
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
================================================================================ = 标题: KYLib 简介 = 版本: 3.0.2.7 (build 2011.10.25) ================================================================================ 从 KYLib 2.1.1.0 版本开始, 在中添加详细的注释, 可以很轻松的使用及相关属性方 法等等。 KYLib 使用简单, 只要头文件中包含有: #include "KYLib.h" 就可以了。 KYLib 有针对VC6, VS2008等版本库, 而且基于KYLib开发的代码可以在VC不同版本中平稳移 植, 甚至可以平稳移植到Linux中。 KYLib 提供的相关函数与Delphi中基本相同, 提供丰富的函数和, 如: a. 字符串KYString与Delphi中的String结构基本相似, 而且多线程安全稳定 b. TDateTime型与Delphi中的TDateTime型完全相同, 而且支持相关的函数 c. 字符串操作相关函数 {Copy, Trim, UpperCase, SetLength, Format, SameText, CompareStr等等} d. 日期时间相关函数 {Date, Time, Now, FormatDateTime等等} e. 文件操作相关函数 {FileOpen, FileCreate, FileClose, FileExists, CreateDir, DeleteFile, ExtractFilePath等等} f. 编码相关函数 {Randomize, Random, Unicode/UTF8编码, CRC32编码, Base64编码, MD5编码, 加密/解密编码等等} g. 线程相关 {TThread, TKYThread, TKYRunThread, TKYAsynchRun, TKYTimer等等} h. 文件 {TFile, TKYMapFile, TKYDebugFile, TKYLogObj等等} i. 文件表 {TKYTable, TKYIndexFile, TKYIndexTree} j. ini文件 {TIniFile, TMemIniFile等等} k. 列表 {TKYList, TKYStringList, TKYCustomList, TKYNameStrList, TKYCode2Name 等等} l. 链表 {TKYQueue, TKYStack, TKYQueueEx, TKYStackEx等等} m. 句柄 {TKYHandles, TKYMemHandles等等} n. 二叉树 {TKYAVLTree, TKYAVLTreeEx, TKYLevelTree, AVL树相关函数} o. 共享队列 {TKYQueueMap, TKYQueueFile, TKYQueueFileEx} p. 内存管理 {TKYFormatBlock, TKYMemBlock等等} q. 线程同步 {TKYCritSect, TKYLockRW, TKYEvent, TKYMutex, TKYSemaphore} r. 可变 {TKYVarType, TKYField, TKYFieldDef等等} s. 接收缓冲区 {TKYRecvBuffer, TKYRecvCache} t. Socket相关 {TKYBaseSocket, TKYSockRecvThread, TKYTCPClient, TKYTCPServer, TKYUDPClient, TKYUDPServer等等} u. 压缩/解压缩 {TKYPack, TKYUnpack, TKYQuickPack, TKYQuckUnpack} v. 字符串模式匹配 {TKYMatch} w. map 相关的模板 {TKYMapIntKey, TKYMapStrKey, TKYMapIntKeyEx, TKYMapStrKeyEx} KYLib 是专业级类库, 具有高性能和高稳定的体系结构, 不是一般共享库能比拟。 KYLib 只提供头文件, 库文件和目标文件, 供大家参考学习和使用。
KYLib 2.1.1.0 (build 2010.01.30) KYLib 使用简单, 只要头文件中包含有: #include "KYLib.h" 就可以了。 KYLib 有针对VC6, VS2003, VS2005, VS2008等版本库, 而且基于KYLib开发的代码可以在VC不同版本中平稳移植, 以及可以平稳移植到Linux中。 从 KYLib 2.1.1.0 版本开始, 在中添加详细的注释, 可以很轻松的使用及相关属性方法等等。 KYLib 提供的相关函数与Delphi中基本相同, 提供丰富的函数和, 如: a. 字符串KYString与Delphi中的String结构基本相似, 而且多线程安全稳定 b. TDateTime型与Delphi中的TDateTime型完全相同, 而且支持相关的函数 c. 字符串操作相关函数 {Copy, Trim, UpperCase, SetLength, Format, SameText, CompareStr等等} d. 日期时间相关函数 {Date, Time, Now, FormatDateTime等等} e. 文件操作相关函数 {FileOpen, FileCreate, FileClose, FileExists, CreateDir, DeleteFile, ExtractFilePath等等} f. 编码相关函数 {Unicode/UTF8编码, CRC32编码, Base64编码, MD5编码, 加密/解密编码} g. 线程相关 {TThread, TKYThread, TKYAsynchRun, TKYRunThread, TKYTimer等等} h. 文件 {TFile, TKYDebugFile, TKYLogObj等等} i. ini文件 {TIniFile, TMemIniFile等等} j. 列表 {TKYList, TKYStringList, TKYCustomList, TKYNameStrList, TKYCode2Name等等} k. 链表 {TKYQueue, TKYStack, TKYQueueEx, TKYStackEx等等} l. 句柄 {TKYHandles, TKYMemHandles等等} m. 二叉树 {TKYAVLTree, TKYAVLTreeEx, TKYLevelTree} n. 共享队列 {TKYQueueMap, TKYQueueFile} o. 内存管理 {TKYFormatBlock, TKYMemBlock等等} p. 线程同步 {TKYCritSect, TKYLockRW, TKYEvent, TKYMutex, TKYSemaphore} q. 可变 {TKYVarType, TKYField, TKYFieldDef等等} r. 接收缓冲区 {TKYRecvBuffer, TKYRecvCache} s. Socket相关 {TKYBaseSocket, TKYSockRecvThread, TKYTCPClient, TKYTCPServer, TKYUDPClient, TKYUDPServer等等} t. 压缩/解压缩 {TKYPackObj, TKYUnpackObj} KYLib 是专业级类库, 具有高性能和高稳定的体系结构, 不是一般共享库能比拟。 KYLib 只提供.h, .o和.a文件, 供大家参考学习和使用。
= 标题: KYLib 简介 = 版本: 3.1.0.0 (build 2014.10.21) 从 KYLib 2.1.1.0 版本开始, 在中添加详细的注释, 可以很轻松的使用及相关属性方 法等等。 KYLib 使用简单, 只要头文件中包含有: #include "KYLib.h" 就可以了。 KYLib 有针对VC6, VS2008等版本库, 而且基于KYLib开发的代码可以在VC不同版本中平稳移 植, 甚至可以平稳移植到Linux中。 KYLib 提供的相关函数与Delphi中基本相同, 提供丰富的函数和, 如: a. 字符串KYString与Delphi中的String结构基本相似, 而且多线程安全稳定 b. TDateTime型与Delphi中的TDateTime型完全相同, 而且支持相关的函数 c. 字符串操作相关函数 {Copy, Trim, UpperCase, SetLength, Format, SameText, CompareStr等等} d. 日期时间相关函数 {Date, Time, Now, FormatDateTime等等} e. 文件操作相关函数 {FileOpen, FileCreate, FileClose, FileExists, CreateDir, DeleteFile, ExtractFilePath等等} f. 编码相关函数 {Randomize, Random, Unicode/UTF8编码, CRC32编码, Base64编码, MD5编码, 加密/解密编码等等} g. 线程相关 {TThread, TKYThread, TKYRunThread, TKYAsynchRun, TKYTimer等等} h. 文件 {TFile, TKYMapFile, TKYDebugFile, TKYLogObj等等} i. 文件表 {TKYTable, TKYIndexFile, TKYIndexTree} j. ini文件 {TIniFile, TMemIniFile等等} k. 列表 {TKYList, TKYStringList, TKYCustomList, TKYNameStrList, TKYCode2Name 等等} l. 链表 {TKYCycQueue, TKYQueue, TKYStack, TKYQueueEx, TKYStackEx等等} m. 句柄 {TKYHandles, TKYMemHandles等等} n. 二叉树 {TKYAVLTree, TKYAVLTreeEx, TKYLevelTree, AVL树相关函数} o. 共享队列 {TKYQueueMap, TKYQueueFile, TKYQueueFileEx} p. 内存管理 {TKYCache, TKYFormatBlock, TKYMemBlock等等} q. 线程同步 {TKYCritSect, TKYLockRW, TKYEvent, TKYMutex, TKYSemaphore} r. 可变 {TKYVarType, TKYField, TKYFieldDef等等} s. 接收缓冲区 {KYCycBuffer, TKYRecvBuffer, TKYRecvCache} t. Socket相关 {TKYBaseSocket, TKYSockRecvThread, TKYTCPClient, TKYTCPServer, TKYUDPClient, TKYUDPServer等等} u. 压缩/解压缩 {TKYPack, TKYUnpack, TKYQuickPack, TKYQuckUnpack, KYFixedPack, KYFixedUnpack} v. 字符串模式匹配 {TKYMatch} w. map 相关的模板 {TKYMapIntKey, TKYMapStrKey, TKYMapObjKey, TKYMapIntKeyEx, TKYMapStrKeyEx, TKYMapObjKeyEx} x. 智能对象集模板 {TKYSmartObjs, TKYAllotObjs} KYLib 是专业级
KYLib 3.0.0.0 (build 2011.03.09) 从 KYLib 2.1.1.0 版本开始, 在中添加详细的注释, 可以很轻松的使用及相关属性方法等等。 KYLib 使用简单, 只要头文件中包含有: #include "KYLib.h" 就可以了。 KYLib 有针对VC6, VS2008等版本库, 而且基于KYLib开发的代码可以在VC不同版本中平稳移植, 甚至可以平稳移植到Linux中。 KYLib 提供的相关函数与Delphi中基本相同, 提供丰富的函数和, 如: a. 字符串KYString与Delphi中的String结构基本相似, 而且多线程安全稳定 b. TDateTime型与Delphi中的TDateTime型完全相同, 而且支持相关的函数 c. 字符串操作相关函数 {Copy, Trim, UpperCase, SetLength, Format, SameText, CompareStr等等} d. 日期时间相关函数 {Date, Time, Now, FormatDateTime等等} e. 文件操作相关函数 {FileOpen, FileCreate, FileClose, FileExists, CreateDir, DeleteFile, ExtractFilePath等等} f. 编码相关函数 {Randomize, Random, Unicode/UTF8编码, CRC32编码, Base64编码, MD5编码, 加密/解密编码等等} g. 线程相关 {TThread, TKYThread, TKYRunThread, TKYAsynchRun, TKYTimer等等} h. 文件 {TFile, TKYDebugFile, TKYLogObj等等} i. 文件表 {TKYTable} j. ini文件 {TIniFile, TMemIniFile等等} k. 列表 {TKYList, TKYStringList, TKYCustomList, TKYNameStrList, TKYCode2Name等等} l. 链表 {TKYQueue, TKYStack, TKYQueueEx, TKYStackEx等等} m. 句柄 {TKYHandles, TKYMemHandles等等} n. 二叉树 {TKYAVLTree, TKYAVLTreeEx, TKYLevelTree, AVL树相关函数} o. 共享队列 {TKYQueueMap, TKYQueueFile} p. 内存管理 {TKYFormatBlock, TKYMemBlock等等} q. 线程同步 {TKYCritSect, TKYLockRW, TKYEvent, TKYMutex, TKYSemaphore} r. 可变 {TKYVarType, TKYField, TKYFieldDef等等} s. 接收缓冲区 {TKYRecvBuffer, TKYRecvCache} t. Socket相关 {TKYBaseSocket, TKYSockRecvThread, TKYTCPClient, TKYTCPServer, TKYUDPClient, TKYUDPServer等等} u. 压缩/解压缩 {TKYPack, TKYUnpack, TKYQuickPack, TKYQuckUnpack} v. 字符串模式匹配 {TKYMatch} w. map 相关的模板 {TKYMapIntKey, TKYMapStrKey, TKYMapIntKeyEx, TKYMapStrKeyEx} KYLib 是专业级类库, 具有高性能和高稳定的体系结构, 不是一般共享库能比拟。 KYLib 只提供.h, .obj和.lib文件, 供大家参考学习和使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值