跳到主要内容
版本:4.0

其他相关功能类

定义

命名空间:
TouchSocket.Core
安装:
dotnet add package TouchSocket.Core

一、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扩展方法,可以将DateTimeDateTimeOffset转换为自1970年1月1日以来的毫秒数的32位无符号整数。

🔄 正在加载代码...
提示

短时间戳适用于需要节省存储空间的场景,使用uint类型可以表示从1970年1月1日开始的毫秒数,适用于时间范围不太长的场景。

八、读写锁using

一般的,我们都会使用ReaderWriterLockSlim读写锁,进行成对的Enter和Exit。传统方式需要使用try-finally块来确保锁的释放:

🔄 正在加载代码...

但是会显得代码非常臃肿。所以我们可以简化使用using实现:

🔄 正在加载代码...
提示

ReadLockWriteLock均为struct类型,所以几乎不会影响性能。使用using语句可以确保锁在代码块执行完毕后自动释放,使代码更加简洁安全。

九、3DES加密

TouchSocket提供了3DES(Triple DES)数据加密和解密功能,可以方便地保护敏感数据。

🔄 正在加载代码...
注意
  • 加密口令长度必须为8个字符
  • 解密时使用的口令必须与加密时一致
  • 3DES是对称加密算法,加密和解密使用相同的密钥