欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 明星 > Unity数据持久化 之 一个通过2进制读取Excel并存储的轮子(4)

Unity数据持久化 之 一个通过2进制读取Excel并存储的轮子(4)

2024/10/23 3:37:13 来源:https://blog.csdn.net/2301_77947509/article/details/141999380  浏览:    关键词:Unity数据持久化 之 一个通过2进制读取Excel并存储的轮子(4)

本文仅作笔记学习和分享,不用做任何商业用途

本文包括但不限于unity官方手册,unity唐老狮等教程知识,如有不足还请斧正​​

Unity数据持久化 之 一个通过2进制读取Excel并存储的轮子(3)-CSDN博客 

这节就是真正的存储数据了

 

理清一下思路:

1.存储路径并检查

  //2进制文件类存储private static string Data_Binary_Path = Application.streamingAssetsPath + "/Binary/";
//路径检查if (!Directory.Exists(Data_Binary_Path))Directory.CreateDirectory(Data_Binary_Path);Debug.Log(Data_Binary_Path);

2. 存入key所对应的变量名字

Q:为什么?

A:因为使用的是字典存储,所以就需要键值对,所以读的时候,就可以采用将key的变量名作为字典key这一方式进行存储

顺带,先存储一下行数

  #region 存入主键的变量名//先存入表的有效数据的行数,并且不需要表头那那些行数所以减去4fs.Write(BitConverter.GetBytes(dataTable.Rows.Count - 4), 0, 4);//再存入key所在的列的变量名string keyName = GetVariableNameRow(dataTable)[GetKey(dataTable)].ToString();Byte[] bytes = Encoding.UTF8.GetBytes(keyName);//之后写入字符串,先长度fs.Write(BitConverter.GetBytes(bytes.Length), 0, 4);fs.Write(bytes, 0, bytes.Length);//再内容

3.按行列循环存入已经转为2进制数组的数据

        //取行存列,依次排开,按类型存储DataRow row;DataRow dataType =GetVariableDataTypeRow(dataTable);for (int i = Begin_Index; i < dataTable.Rows.Count; i++){row = dataTable.Rows[i];for (int j = 0; j < dataTable.Columns.Count; j++){switch (dataType[j].ToString()){case "int":fs.Write(BitConverter.GetBytes(int.Parse(row[j].ToString())), 0, 4);break;case "string":bytes =Encoding.UTF8.GetBytes((string)row[j].ToString());//还是先写入长度,后写入内容fs.Write(BitConverter.GetBytes(bytes.Length),0,4);fs.Write(bytes,0,bytes.Length);break;case "bool":fs.Write(BitConverter.GetBytes(bool.Parse(row[j].ToString())), 0, 1);break;case "float":fs.Write(BitConverter.GetBytes(float.Parse(row[j].ToString())), 0, 4);break;}}#endregion}fs.Close();}
}

4.总览

  //生成二进制数据的方法-zprivate static void GenerateExcelBinary(DataTable dataTable){//路径检查if (!Directory.Exists(Data_Binary_Path))Directory.CreateDirectory(Data_Binary_Path);Debug.Log(Data_Binary_Path);//创建2进制文件存储using (FileStream fs = new FileStream(Data_Binary_Path + dataTable.TableName + ".json", FileMode.OpenOrCreate, FileAccess.Write)){#region 存入主键的变量名//先存入表的有效数据的行数,并且不需要表头那那些行数所以减去4fs.Write(BitConverter.GetBytes(dataTable.Rows.Count - 4), 0, 4);//再存入key所在的列的变量名string keyName = GetVariableNameRow(dataTable)[GetKey(dataTable)].ToString();Byte[] bytes = Encoding.UTF8.GetBytes(keyName);//之后写入字符串,先长度fs.Write(BitConverter.GetBytes(bytes.Length), 0, 4);fs.Write(bytes, 0, bytes.Length);//再内容#endregion#region 存入数据//取行存列,依次排开,按类型存储DataRow row;DataRow dataType =GetVariableDataTypeRow(dataTable);for (int i = Begin_Index; i < dataTable.Rows.Count; i++){row = dataTable.Rows[i];for (int j = 0; j < dataTable.Columns.Count; j++){switch (dataType[j].ToString()){case "int":fs.Write(BitConverter.GetBytes(int.Parse(row[j].ToString())), 0, 4);break;case "string":bytes =Encoding.UTF8.GetBytes((string)row[j].ToString());//还是先写入长度,后写入内容fs.Write(BitConverter.GetBytes(bytes.Length),0,4);fs.Write(bytes,0,bytes.Length);break;case "bool":fs.Write(BitConverter.GetBytes(bool.Parse(row[j].ToString())), 0, 1);break;case "float":fs.Write(BitConverter.GetBytes(float.Parse(row[j].ToString())), 0, 4);break;}}#endregion}fs.Close();}}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com