# LiteByte **Repository Path**: zhangyu800/litebyte ## Basic Information - **Project Name**: LiteByte - **Description**: LiteByte是一种轻量级的二进制数据交换格式。 体积小巧、简单易用是设计目标。主要用于解决前后台数据传输的问题。 - **Primary Language**: C# - **License**: MIT - **Default Branch**: master - **Homepage**: https://segmentfault.com/a/1190000021329368 - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 0 - **Created**: 2022-06-01 - **Last Updated**: 2025-08-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # LiteByte 开发环境:VS2022 .Net版本:.Net 8.0 作者:ZhangYu 创建日期:2019-05-22 修改日期:2025-03-01 最新版本:0.13.6 Blog:[https://segmentfault.com/a/1190000021329368](https://segmentfault.com/a/1190000021329368) Git:[https://gitee.com/zhangyu800/litebyte](https://gitee.com/zhangyu800/litebyte) ## 一、简介 LiteByte是一种轻量级的二进制数据交换格式。 体积小巧、简单易用是设计目标。 ———————————————————————————————————————————————————————— ## 二、支持的数据类型 ### 1.基本数据类型(27种) 整数类型: (01)bit1(bool): 1位定长无符号整数 取值范围 [0 = false、1 = true] (02)char: 16位定长无符号整数 取值范围 [0 ~ 65535] (03)int8(sbyte): 8位定长有符号整数 取值范围 [-128 ~ 127] (04)int16: 16位定长有符号整数 取值范围 [-32768 ~ 3276] (05)int32: 32位定长有符号整数 取值范围 [-2147483648 ~ 2147483647] (06)int64: 64位定长有符号整数 取值范围 [-9223372036854775808 ~ 9223372036854775807] (07)uint8(byte): 8位定长无符号整数 取值范围 [0 ~ 255] (08)uint16: 16位定长无符号整数 取值范围 [0 ~ 65535] (09)uint32: 32位定长无符号整数 取值范围 [0 ~ 4294967295] (10)uint64: 64位定长无符号整数 取值范围 [0 ~ 18446744073709551615] (11)vint16(short): 1+(8~16)位变长有符号整数 取值范围 同int16 (12)vint32(int): 2+(8~32)位变长有符号整数 取值范围 同int32 (13)vint64(long): 3+(8~64)位变长有符号整数 取值范围 同int64 (14)vuint16(ushort): 1+(8~16)位变长无符号整数 取值范围 同uint16 (15)vuint32(uint): 2+(8~32)位变长无符号整数 取值范围 同uint32 (16)vuint64(ulong): 3+(8~64)位变长无符号整数 取值范围 同uint64 浮点数: (17)float8: 8位定长浮点数 取值范围 [0/255 ~ 255/255] (18)float16(half): 16位定长浮点数 取值范围 [-65504 ~ 65504] (19)float32(float): 32位定长浮点数 取值范围 [-3.40282347E+38F ~ 3.40282347E+38F] (20)float64(double):64位定长浮点数 取值范围 [-1.7976931348623157E+308 ~ 1.7976931348623157E+308] (21)decimal: vuint32 + (4 x n)位变长浮点数 取值范围 [-a.b ~ a.b](转为字符串) 字符串: (22)ascii: vuint32 x 8位定长字符串 (23)utf8: vuint32 x (8~32位) 变长字符串 (24)utf16: vuint32 x (16~32位) 变长字符串 (25)utf32: vuint32 x 32位 定长字符串(with BOM) (26)vunicode(string):vuint32 x vuint32 变长字符串 日期时间 (27)DateTime: vuint64 8~64位变长整数(转为Java timestamp毫秒) —————————————————————————————————————————————————————————————————— ### 2.特殊数据类型(3种) (1) 数组Array(int[]、long[]、string[] 等) (2) 列表List(List、List、List 等) (3) 哈希表Dictionary(Dictionary、Dictionary、Dictionary 等) —————————————————————————————————————————————————————————————————— ### 3.自定义数据类型(有默认构造函数的 非泛型) (1) class类(默认值为null): public class UserVO { public int id; public string name; } (2) struct结构体(有默认值 不为null): public struct Vector3VO { public float x; public float y; public float z; } ## 三、不支持的数据类型 1.无默认构造函数的自定义类型(需要传参数初始化的自定义类型) 2.带泛型的自定义类型(初始化时需要传泛型的) 3.循环引用的类型(比如LinkedListNode 有Previous和Next引用会导致对象被循环引用 无法初始化) —————————————————————————————————————————————————————————————————— ## 四、更新日志 0.7.0: 用IL.Emit代替反射,大幅度提升get和set性能。 0.8.0: 添加编译多个类的功能,一个配置文件可以写多个类了,可以一次性识别。 0.8.1: 删除LBObject类,因为IL优化后get和set的性能很好,不再需要LBObject了。 0.8.2: 优化LBParser中 从tokens中删除访问修饰符的代码,不再生成新的list。 0.8.3: 优化反射工具类 ReflectionUtil 创建实例方法中的参数。 0.9.0: 优化反射工具(增加IL.Emit工具、代理工具、指针工具 用于优化反射) 增加反射工具对IL2CPP模式的兼容性。 0.10.0: 重构LBReader读取类 增加对List的支持 优化LBConverter类。 0.10.1: 修复BUG:1.LBWriter WriteVarLength时没有正确扩容的BUG 2.LBConverter没有正确抛出错误信息的BUG。 0.11.0: 重构LBWriter写入类 增加对List的支持 优化LBConverter类。 0.11.1: 优化LBConverter.ToObject() 和 ToBytes()。 0.12.0: 精简代码 增加LBWriter和LBReader的代码重用性。 0.13.0: 重写LBLexer、LBParser、LBWriter、LBReader、LBConverter 全面改进用法 提升便捷性。 0.13.1: 重写LBReflectionUtil、LBMemberWrapper 用指针替代Field的反射、用Delegate替代Property的反射 提升性能。 0.13.2: 增加对decimal、DateTime类型的支持。重写WriteBits()、ReadBits()方法, 添加LBTest测试类。 0.13.3: 增加LBWriter写入数据时 缓冲区的最大容量限制。增加写入数组时 预先计算容量。 0.13.4: 修改VInt算法 所有负数转为正数 符号位放在最高位。 0.13.5: 添加LBType预估大小 用于LBWriter初始化缓冲区大小 降低GC。 0.13.6: LBNumberTypeReader 优化代码 增加Skip(byteCount) 方法 可以跳过字节。