-
Notifications
You must be signed in to change notification settings - Fork 26
serialize
laishikai edited this page Oct 7, 2021
·
6 revisions
class CSerialize
{
// 功能:设置读模式, 流的数据由外部指定
public void ReadMode(list<char> array, int nStart, int nSize);
// 功能:设置读模式, 流的数据由已知的流中获取
public void ReadMode(FCSerialize ar, int nStart, int nSize);
// 功能:设置读模式, 流的数据由外部指定
public void ReadMode(StringA szData);
// 功能:设置写模式, 流的内存外部指定
public void WriteMode(list<char> array, int nStart, int nSize);
// 功能:设置写模式, 流的内存由自己维护
public void OwnWriteMode(int nSize);
// 功能:测试写模式,不会发生真正的数据写入,用于求对象序列化后的长度
public void TestWriteMode();
// 功能:跳过指定字节
public void Skip(int nSkipSize);
// 功能:设置相对于首地址的偏移
public void Seek(int nPos);
// 功能:将序列化后的数据拷贝到数组
public void CopyTo(list<char> aOut);
public void CopyTo(StringA out szOut);
// 功能:取当前流的指针位置
public int GetPosition();
// 功能:返回当前流的缓冲区的最大长度
public int GetBufferSize();
// 功能:测试当前流是不是读模式
public bool IsReadMode();
// 功能:测试是不是可以读取指定字节大小的数据
// 测试当前是不是有指定大小数据可读
public bool IsCanRead(int nReadSize);
// 功能:将当前指针跳到流数据末尾
public void SkipToEnd();
// 功能:预分配写入缓冲区的长度
public bool Reserve(int nSize);
--------------------------------------------------------------------------------------
// 功能:读或写一个变量
// 参数:value - 任意数据类型(基本数据类型 + 自定义的class)
// 说明:value默认是引用传递的,如果class,读模式下如果为NULL,就会自动创建一个
public void ReadWrite(_Ty value);
// 功能:从字符串的指定位置,读取一个定长的字符串,并写入到value中
// 参数:value - 输入并输出的数组变量
// nStart - 从value的指定写入位置
// nSize - 读取写入的长度
// 说明:仅支持基本的数据类型(如boo, char, byte, short, ushort, int, uint, long, float, double, StringA)
// 不支持对象数组
public bool ReadFixed(StringA value, int nStart, int nSize);
// 功能:从字符串的指定位置,读取一个定长的字符串,并写入到数据流
public bool WriteFixed(StringA value, int nStart, int nSize);
// 功能:从数组指定位置,读取一个定长的数组,并写入到数据流
// 参数:value - 数组变量
// nStart - 从value的指定写入位置
// nSize - 读取写入的长度
// 说明:仅支持基本的数据类型(如boo, char, byte, short, ushort, int, uint, long, float, double, StringA)
// 不支持对象数组
public bool WriteFixed(List<_Ty> value, int nStart, int nSize);
--------------------------------------------------------------------------------------
// 以下是关于Protobuf相关的接口
// 功能:读取一个PB的TAG头
public int ProtobufReadTag();
// 功能:按Tag的头,跳过流的读取
public void ProtobufSkipField(int nTag);
// 功能:读取一个整型变量
public bool ProtobufReadVarint(_Ty value);
// 功能:读取一个PB对象
public bool ProtobufRead(_Ty value, int nFiledIndex, PB_ZipType keyZipType);
// 功能:写入一个PB对象
public void ProtobufWrite(_Ty value, int nFieldIndex, PB_ZipType nType);
// 功能:读取map对象
// 说明:这里sMap参数是引用传递,如果你想加上ref, 就得修改导出的代码,因为代码的代码目前没有加 ref
public bool ProtobufReadMap(map<_TyKey, _TyValue> sMap, int nFiledIndex, PB_ZipType keyZipType, PB_ZipType valueZipType);
// 功能:写入map对象
public void ProtobufWriteMap<_TyKey, _TyValue>(map<_TyKey, _TyValue> sMap, int nFiledIndex, PB_ZipType keyZipType, PB_ZipType valueZipType);
// 功能:通过反射读取Protobuf脚本对象
// 说明:obj - 只能是通过插件导出的带PBAttrib标签的对象
public bool ProtobufReadObj(System.Object obj);
// 功能:通过反射写入Protobuf脚本对象
// 说明:obj - 只能是通过插件导出的带PBAttrib标签的对象
public void ProtobufWriteObj(System.Object obj);
--------------------------------------------------------------------------------------
};
public enum PB_ZipType
{
PB_Zip_Varint, // 变长
PB_Zip_Fixed, // 定长
PB_Zip_ZigZag, // ZigZag压缩
};