private static void test_xbuffer(A data) { var steam = new XSteam(1, 1024 * 1024 * 100); // 序列化 uint offset = 0; Timer.beginTime(); ABuffer.serialize(data, steam); Timer.endTime("xbuffer 普通模式序列化"); var buffer = steam.getBytes(); // 反序列化 offset = 0; Timer.beginTime(); ABuffer.deserialize(buffer, ref offset); Timer.endTime("xbuffer 普通模式反序列化"); // 泛型模式序列化 Timer.beginTime(); Serializer.cachedSteam = steam; Serializer.serialize(data); Timer.endTime("xbuffer 泛型模式序列化"); buffer = steam.getBytes(); // 泛型模式反序列化 Timer.beginTime(); Serializer.deserialize <A>(buffer); Timer.endTime("xbuffer 泛型模式反序列化"); // 内存占用 Console.WriteLine(string.Format(" xbuffer 普通模式总占用内存 {0} byte.", buffer.Length)); }
public static void serialize(AchievementCondition value, XSteam steam) { // null boolBuffer.serialize(value == null, steam); if (value == null) { return; } // type intBuffer.serialize(value.type, steam); // count intBuffer.serialize(value.count, steam); // param intBuffer.serialize(value.param, steam); // compareType intBuffer.serialize(value.compareType, steam); }
/// <summary> /// 序列化数组类型数据 /// </summary> /// <param name="data">数据</param> /// <param name="spilter">分隔符</param> /// <param name="stream">Xbuffer的内存管理分配对象</param> private void serializArrayData <T>(string data, string spilter, XSteam stream) { if (string.IsNullOrEmpty(data)) { // 未配置一维数据,默认值去对应T类型的默认值 // 长度默认为1 serializNoneArrayData <intBuffer>("1", stream); var defaultvalue = getBufferCorrespondingDV <T>(); serializNoneArrayData <T>(defaultvalue, stream); } else { // 只支持1维数据的配置和快速解析 var spliters = spilter.ToCharArray(); var datas = data.Split(spliters[0]); // 写入一维数组的长度字节数信息 serializNoneArrayData <intBuffer>(datas.Length.ToString(), stream); // 开始序列化一维数组数据 foreach (var dt in datas) { serializNoneArrayData <T>(dt, stream); } } }
public static void serialize(TargetSystem value, XSteam steam) { // null boolBuffer.serialize(value == null, steam); if (value == null) { return; } // systemType intBuffer.serialize(value.systemType, steam); // param1 intBuffer.serialize(value.param1, steam); // param2 intBuffer.serialize(value.param2, steam); // param3 intBuffer.serialize(value.param3, steam); }
public static void serialize(t_author_Info value, XSteam steam) { // null boolBuffer.serialize(value == null, steam); if (value == null) { return; } // id intBuffer.serialize(value.id, steam); // author stringBuffer.serialize(value.author, steam); // age intBuffer.serialize(value.age, steam); // sex stringBuffer.serialize(value.sex, steam); // national stringBuffer.serialize(value.national, steam); }
public static void serialize(AchievementConfigs value, XSteam steam) { intBuffer.serialize(value.ConfigList.Length, steam); for (int i = 0; i < value.ConfigList.Length; i++) { AchievementConfigBuffer.serialize(value.ConfigList[i], steam); } }
public unsafe static void serialize(bool value, XSteam steam) { steam.applySize(size); fixed(byte *ptr = steam.contents[steam.index_group]) { *(bool *)(ptr + steam.index_cell) = value; steam.index_cell += size; } }
public static void serialize(Config value, XSteam steam) { // null boolBuffer.serialize(value == null, steam); if (value == null) { return; } // AchievementConfig AchievementConfigsBuffer.serialize(value.AchievementConfig, steam); }
/// <summary> /// 序列化一行Excel数据信息 /// </summary> /// <param name="exceldata"></param> private void serializeExcelOneLineDatas(ExcelData[] exceldata, XSteam stream) { // 先写入数据是否为空的bool信息 serializeExcelData("bool", exceldata == null ? "true" : "false", string.Empty, stream); if (exceldata != null) { // 数据不为空才写入数据信息 foreach (var data in exceldata) { serializeExcelData(data.Type, data.Data, data.Spliter, stream); } } }
public static void serialize(t_language value, XSteam steam) { // null boolBuffer.serialize(value == null, steam); if (value == null) { return; } // id intBuffer.serialize(value.id, steam); // content stringBuffer.serialize(value.content, steam); }
public static void serialize(t_global_i value, XSteam steam) { // null boolBuffer.serialize(value == null, steam); if (value == null) { return; } // Key stringBuffer.serialize(value.Key, steam); // Value intBuffer.serialize(value.Value, steam); }
public static void serialize(t_language value, XSteam steam) { // null boolBuffer.serialize(value == null, steam); if (value == null) { return; } // Id stringBuffer.serialize(value.Id, steam); // string_value stringBuffer.serialize(value.string_value, steam); }
public static void serialize(t_language_cn value, XSteam steam) { // null boolBuffer.serialize(value == null, steam); if (value == null) { return; } // Key stringBuffer.serialize(value.Key, steam); // Value stringBuffer.serialize(value.Value, steam); }
/// <summary> /// 将相关Excel数据写入到对应二进制文件 /// </summary> /// <param name="excelinfo">excel数据信息</param> /// <returns></returns> public bool writeExcelDataToBytes(ExcelInfo excelinfo) { Console.WriteLine(string.Format("当前正在序列化表格 : {0}", excelinfo.ExcelName)); // 因为考虑到Xbuffer的内存分配策略是递增的 // 在不确Excel数据大小的情况下,默认分配不能过大,避免内存浪费 var exceldatalist = excelinfo.DatasList; using (var output = File.Create(BytesFolderPath + excelinfo.ExcelName + ConstValue.ExcelBytesDataFilePostFix)) { BinaryWriter bw = new BinaryWriter(output); // 写入表格数据行数字节信息 var totallinenumber = exceldatalist.Count; bw.Write(totallinenumber); int currentlinenmber = 0; try { //接下来的写入格式: 每一行数据字节数长度 + 数据字节 for (int i = 0, length = exceldatalist.Count; i < length; i++) { //这里分配足够小,确保不会因为数据写入没有导致内存分配扩张导致wast计算不正确 XSteam stream = new XSteam(1, 32); serializeExcelOneLineDatas(exceldatalist[i], stream); var bytes = stream.getBytes(); // 写入单行数据长度信息 bw.Write(bytes.Length); // 写入单行表格数据字节信息 bw.Write(bytes); currentlinenmber = i; } } catch (System.Exception e) { Console.WriteLine(string.Format("异常 : {0}", e.ToString())); Console.WriteLine(string.Format("当前序列化的行号 : {0}", currentlinenmber)); return(false); } finally { bw.Flush(); bw.Close(); } } return(true); }
public static void serialize(E value, XSteam steam) { // null boolBuffer.serialize(value == null, steam); if (value == null) { return; } // a boolBuffer.serialize(value.a, steam); // b intBuffer.serialize(value.b, steam); // c floatBuffer.serialize(value.c, steam); // d stringBuffer.serialize(value.d, steam); }
public static void serialize(RewardItem value, XSteam steam) { // null boolBuffer.serialize(value == null, steam); if (value == null) { return; } // itemId intBuffer.serialize(value.itemId, steam); // itemCount intBuffer.serialize(value.itemCount, steam); }
public static void serialize(IdPair value, XSteam steam) { // null boolBuffer.serialize(value == null, steam); if (value == null) { return; } // id intBuffer.serialize(value.id, steam); // value intBuffer.serialize(value.value, steam); }
public static void serialize(A value, XSteam steam) { // null boolBuffer.serialize(value == null, steam); if (value == null) { return; } // a intBuffer.serialize(value.a.Length, steam); for (int i = 0; i < value.a.Length; i++) { boolBuffer.serialize(value.a[i], steam); } // b intBuffer.serialize(value.b.Length, steam); for (int i = 0; i < value.b.Length; i++) { intBuffer.serialize(value.b[i], steam); } // c intBuffer.serialize(value.c.Length, steam); for (int i = 0; i < value.c.Length; i++) { floatBuffer.serialize(value.c[i], steam); } // d intBuffer.serialize(value.d.Length, steam); for (int i = 0; i < value.d.Length; i++) { stringBuffer.serialize(value.d[i], steam); } // e intBuffer.serialize(value.e.Length, steam); for (int i = 0; i < value.e.Length; i++) { EBuffer.serialize(value.e[i], steam); } }
public static void serialize(t_ui value, XSteam steam) { // null boolBuffer.serialize(value == null, steam); if (value == null) { return; } // WinName stringBuffer.serialize(value.WinName, steam); // ResPath stringBuffer.serialize(value.ResPath, steam); // IsFullScreen boolBuffer.serialize(value.IsFullScreen, steam); // Layer intBuffer.serialize(value.Layer, steam); }
public static void serialize(t_Global3 value, XSteam steam) { // null boolBuffer.serialize(value == null, steam); if (value == null) { return; } // Id intBuffer.serialize(value.Id, steam); // stringvalue stringBuffer.serialize(value.stringvalue, steam); // intvalue intBuffer.serialize(value.intvalue, steam); // floatvalue floatBuffer.serialize(value.floatvalue, steam); // intarrayvalue intBuffer.serialize(value.intarrayvalue.Length, steam); for (int i = 0; i < value.intarrayvalue.Length; i++) { intBuffer.serialize(value.intarrayvalue[i], steam); } // stringarrayvalue intBuffer.serialize(value.stringarrayvalue.Length, steam); for (int i = 0; i < value.stringarrayvalue.Length; i++) { stringBuffer.serialize(value.stringarrayvalue[i], steam); } }
public static void serialize(t_AuthorInfo10 value, XSteam steam) { // null boolBuffer.serialize(value == null, steam); if (value == null) { return; } // Id intBuffer.serialize(value.Id, steam); // author stringBuffer.serialize(value.author, steam); // age intBuffer.serialize(value.age, steam); // money floatBuffer.serialize(value.money, steam); // hashouse boolBuffer.serialize(value.hashouse, steam); // pbutctime longBuffer.serialize(value.pbutctime, steam); // luckynumber intBuffer.serialize(value.luckynumber.Length, steam); for (int i = 0; i < value.luckynumber.Length; i++) { intBuffer.serialize(value.luckynumber[i], steam); } }
public unsafe static void serialize(byte value, XSteam steam) { steam.applySize(size); steam.contents[steam.index_group][steam.index_cell] = value; steam.index_cell += size; }
public static void serialize(AchievementConfig value, XSteam steam) { // null boolBuffer.serialize(value == null, steam); if (value == null) { return; } // Id intBuffer.serialize(value.Id, steam); // Name intBuffer.serialize(value.Name, steam); // Desc intBuffer.serialize(value.Desc, steam); // Icon intBuffer.serialize(value.Icon, steam); // Difficulty intBuffer.serialize(value.Difficulty, steam); // Condition AchievementConditionBuffer.serialize(value.Condition, steam); // RewardItem intBuffer.serialize(value.RewardItem.Length, steam); for (int i = 0; i < value.RewardItem.Length; i++) { RewardItemBuffer.serialize(value.RewardItem[i], steam); } // Buff IdPairBuffer.serialize(value.Buff, steam); // NeedAchievement intBuffer.serialize(value.NeedAchievement, steam); // TargetSystem TargetSystemBuffer.serialize(value.TargetSystem, steam); // Group intBuffer.serialize(value.Group, steam); }
/// <summary> /// 序列化非数组类型数据 /// </summary> /// <param name="data">数据</param> /// <param name="stream">Xbuffer的内存管理分配对象</param> private void serializNoneArrayData <T>(string data, XSteam stream) { var type = typeof(T); var typeinstance = Activator.CreateInstance <T>(); var serilizemethod = type.GetMethod("serialize"); if (serilizemethod != null) { // 填写数据之前需要解析数据到对应的类型 // 支持不填数据采用默认数值的形式 object finaldata = null; if (type == typeof(intBuffer)) { if (string.IsNullOrEmpty(data)) { finaldata = default(int); } else { finaldata = int.Parse(data); } } else if (type == typeof(floatBuffer)) { if (string.IsNullOrEmpty(data)) { finaldata = default(int); } else { finaldata = float.Parse(data); } } else if (type == typeof(stringBuffer)) { if (string.IsNullOrEmpty(data)) { finaldata = string.Empty; } else { finaldata = data; } } else if (type == typeof(longBuffer)) { if (string.IsNullOrEmpty(data)) { finaldata = default(long); } else { finaldata = long.Parse(data); } } else if (type == typeof(boolBuffer)) { if (string.IsNullOrEmpty(data)) { finaldata = default(bool); } else { finaldata = bool.Parse(data); } } serilizemethod.Invoke(typeinstance, new object[] { finaldata, stream }); } else { Console.WriteLine(string.Format("没有找到类型T : {0}的serialize方法!", type.ToString())); } }
/// <summary> /// 序列化excel特定数据 /// </summary> /// <param name="datatype">数据类型字符串</param> /// <param name="data">数据</param> /// <param name="spilter">数据分隔符</param> /// <param name="stream">Xbuffer的内存管理分配对象</param> private bool serializeExcelData(string datatype, string data, string spilter, XSteam stream) { switch (datatype) { case "notation": //注释类型只用于表格查看,不作为实际的数据 //不需要进行序列化 break; case "int": serializNoneArrayData <intBuffer>(data, stream); break; case "float": serializNoneArrayData <floatBuffer>(data, stream); break; case "string": serializNoneArrayData <stringBuffer>(data, stream); break; case "long": serializNoneArrayData <longBuffer>(data, stream); break; case "bool": serializNoneArrayData <boolBuffer>(data, stream); break; case "int[]": serializArrayData <intBuffer>(data, spilter, stream); break; case "float[]": serializArrayData <floatBuffer>(data, spilter, stream); break; case "string[]": serializArrayData <stringBuffer>(data, spilter, stream); break; case "long[]": serializArrayData <longBuffer>(data, spilter, stream); break; case "bool[]": serializArrayData <boolBuffer>(data, spilter, stream); break; default: Console.WriteLine(string.Format("严重错误! 不支持的序列化数据类型 : {0}", datatype)); return(false); } return(true); }