RakNet(57)学习 -- StringCompressor(字符串压缩器)
来源:互联网 发布:网络谣言不能传教案 编辑:程序博客网 时间:2024/05/16 13:48
字符串压缩器(StringCompressor)概述
安全编码和解码字符串
StringCompressor类位于StringCompressor.h文件中,它可以以一种安全的方式编码和解码字符串,避免过度运算。
发送方:
const char *str = "My string";
stringCompressor->EncodeString(str,TRUNCATION_LENGTH,&bitStream,languageId);
接收方:
char buffer[TRUNCATION_LENGTH];
stringCompressor->DecodeString(buffer, TRUNCATION_LENGTH, &bitStream, languageId);
第一个参数是要编码或解码的字符串。第二个参数是写或读的最大字符数。如果字符串数大于这个参数,那么会按照本参数的大小发送字符串。第三个参数是要写入或读出的bitstream。最后一个参数表明使用什么样的字符频率表,两个系统上的两个表必须是相同的。
字符串会被该类根据字符频率表使用胡夫曼编码进行压缩,由languageId指明该算法。默认的频率表参数使用0,它是在StringCompressor.h中使用englishCharacterFrequencies变量静态定义。要想加入你自己的频率表,使用想要用的languageID参数,来调用GenerateTreeFromStrings()方法设置。
如果你的应用程序使用的是CString类,可以在StringCompressor.h中定义_CSTRING_COMPRESSOR来使该类支持CString字符串的压缩。
类似地,如果你的应用程序使用的是std::string,可以在StringCompressor.h中定义_STD_STRING_COMPRESSOR来使该类支持对std::string字符串的压缩。
StringTable概述
预定义静态字符串减少带宽使用
StringTable类是一个与StringCompressor类非常像的一个类,增加了一个AddString方法。
void AddString(const char *str, bool copyString);
str是要加入的字符串。
如果你的字符串不是常量,copyString应该设置为true,如果在内存中是静态的,则设置为false(这个时候仅仅存储一个指针)。
AddString会检查内部的数据数组,查看是否这个字符串已经被注册了。如果没有,它会内在地为该标示符存储两个字节的标示符,用该标示符来代表这个字符串。那么进一步的发送将仅仅发送两个字节的标示符,而不是发送整个字符串,这样如果字符串有三个字符或更多,那么字符串的发送速度更快,也更加节省带宽。如果发送一个没有使用AddString加入的字符串,那么函数的动作与你直接调用stringCompressor一样,但是会多花费额外的一位。
两个系统必须有相同的注册字符串集合,并且是按照相同的顺序注册,同时还要求系统在对应的发送和接收调用中使用StringTable和StringCompressor。
- RakNet(57)学习 -- StringCompressor(字符串压缩器)
- 一日一点RakNet(58)--StringCompressor(字符串压缩器)
- RakNet学习(1)--RakNet
- RakNet学习
- RakNet学习(3) -- 介绍
- RakNet学习 (9) -- Startup
- RakNet学习(10) -- Connecting
- RakNet学习(14) -- SystemAddress
- RakNet学习(19) -- NetworkIDObject
- RakNet学习(20) -- Statistics
- RakNet(30)学习 -- Autopatcher
- RakNet学习(35) -- FileListTransfer
- RakNet学习(40) -- Lobby2Client_360
- RakNet学习(46) -- RakVoice
- RakNet学习(47)-- ReadyEvent
- RakNet学习(49) -- Router2
- RakNet(51)学习 -- SQLite3Plugin
- RakNet(52)学习 -- TeamBalancer
- 算法妙趣实质
- RakNet(56)学习 -- EmailSender(邮件发送器)
- IDL与C#混合编程技术
- Hibernate中用hql查询部分字段
- 正则表达式总结
- RakNet(57)学习 -- StringCompressor(字符串压缩器)
- mount.nfs: access denied by server while mounting 192.168.0.104:/nfsboot
- RakNet(58)学习 -- TCP Interface(TCP接口)
- 获取Eclipse及插件路径汇总
- html5标签
- CALayer_超经典的阐述原理
- Visual Studio与C#编程十个实用技巧
- Linux I2C 总线浅析
- Trapping Rain Water