其他相关功能类
定义
一、Crc计算
TouchSocket从网上搜集了Crc1-23的计算方法,并封装在了Crc类中。
以最常用的Crc16为例:
除了返回字节数组的Crc16方法外,还提供了Crc16Value方法,可以直接返回ushort类型的校验值,更节省内存:
二、时间测量器(TimeMeasurer)
TimeMeasurer是对Stopwatch的封装,可以方便地测量运行Action或异步操作的时间。
同步操作示例:
异步操作示例:
三、MD5计算
TouchSocket提供了便捷的MD5计算方法,可以快速计算字符串的MD5哈希值,并进行验证。
四、16进制相关
TouchSocket提供了多个扩展方法,方便进行16进制字符串与字节数组的转换。
将16进制的字符串转换为字节数组:
public static byte[] ByHexStringToBytes(this string hexString, string splite = default)
将16进制的字符串转换为int32:
public static int ByHexStringToInt32(this string hexString)
使用示例:
五、雪花Id生成
雪花Id算法(Snowflake)是一种分布式唯一ID生成算法,可以生成long类型的不重复Id。
雪花Id生成器适用于分布式系统中需要生成全局唯一ID的场景。通过workerId参数可以区分不同的工作节点,确保在分布式环境下ID的唯一性。
六、数据压缩
TouchSocket内部封装了GZip压缩功能,可以方便地对数据进行压缩和解压缩。
6.1 基本压缩示例
6.2 压缩接口
内部还定义了一个IDataCompressor压缩接口,目的是为了向成熟框架传递压缩方法(例如TcpClient)。默认配备了一个GZipDataCompressor,可以直接使用。当然大家也可以自由扩展其他压缩方法。
自定义压缩器实现:
七、短时间戳
一般的,时间可由long类型作为唯一时间戳,但是有时候,我们也需要短类型的时间戳(uint),TouchSocket提供了ToUnsignedMillis扩展方法,可以将DateTime或DateTimeOffset转换为自1970年1月1日以来的毫秒数的32位无符号整数。
短时间戳适用于需要节省存储空间的场景,使用uint类型可以表示从1970年1月1日开始的毫秒数,适用于时间范围不太长的场景。
八、读写锁using
一般的,我们都会使用ReaderWriterLockSlim读写锁,进行成对的Enter和Exit。传统方式需要使用try-finally块来确保锁的释放:
但是会显得代码非常臃肿。所以我们可以简化使用using实现:
ReadLock和WriteLock均为struct类型,所以几乎不会影响性能。使用using语句可以确保锁在代码块执行完毕后自动释放,使代码更加简洁安全。
九、3DES加密
TouchSocket提供了3DES(Triple DES)数据加密和解密功能,可以方便地保护敏感数据。
- 加密口令长度必须为8个字符
- 解密时使用的口令必须与加密时一致
- 3DES是对称加密算法,加密和解密使用相同的密钥