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

2024-09-08 06:52

本文主要是介绍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();}}

这篇关于Unity数据持久化 之 一个通过2进制读取Excel并存储的轮子(4)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1147423

相关文章

Redis 中的热点键和数据倾斜示例详解

《Redis中的热点键和数据倾斜示例详解》热点键是指在Redis中被频繁访问的特定键,这些键由于其高访问频率,可能导致Redis服务器的性能问题,尤其是在高并发场景下,本文给大家介绍Redis中的热... 目录Redis 中的热点键和数据倾斜热点键(Hot Key)定义特点应对策略示例数据倾斜(Data S

利用Python开发Markdown表格结构转换为Excel工具

《利用Python开发Markdown表格结构转换为Excel工具》在数据管理和文档编写过程中,我们经常使用Markdown来记录表格数据,但它没有Excel使用方便,所以本文将使用Python编写一... 目录1.完整代码2. 项目概述3. 代码解析3.1 依赖库3.2 GUI 设计3.3 解析 Mark

Python实现将MySQL中所有表的数据都导出为CSV文件并压缩

《Python实现将MySQL中所有表的数据都导出为CSV文件并压缩》这篇文章主要为大家详细介绍了如何使用Python将MySQL数据库中所有表的数据都导出为CSV文件到一个目录,并压缩为zip文件到... python将mysql数据库中所有表的数据都导出为CSV文件到一个目录,并压缩为zip文件到另一个

SpringCloud之consul服务注册与发现、配置管理、配置持久化方式

《SpringCloud之consul服务注册与发现、配置管理、配置持久化方式》:本文主要介绍SpringCloud之consul服务注册与发现、配置管理、配置持久化方式,具有很好的参考价值,希望... 目录前言一、consul是什么?二、安装运行consul三、使用1、服务发现2、配置管理四、数据持久化总

SpringBoot整合jasypt实现重要数据加密

《SpringBoot整合jasypt实现重要数据加密》Jasypt是一个专注于简化Java加密操作的开源工具,:本文主要介绍详细介绍了如何使用jasypt实现重要数据加密,感兴趣的小伙伴可... 目录jasypt简介 jasypt的优点SpringBoot使用jasypt创建mapper接口配置文件加密

使用Python高效获取网络数据的操作指南

《使用Python高效获取网络数据的操作指南》网络爬虫是一种自动化程序,用于访问和提取网站上的数据,Python是进行网络爬虫开发的理想语言,拥有丰富的库和工具,使得编写和维护爬虫变得简单高效,本文将... 目录网络爬虫的基本概念常用库介绍安装库Requests和BeautifulSoup爬虫开发发送请求解

解决Java中基于GeoTools的Shapefile读取乱码的问题

《解决Java中基于GeoTools的Shapefile读取乱码的问题》本文主要讨论了在使用Java编程语言进行地理信息数据解析时遇到的Shapefile属性信息乱码问题,以及根据不同的编码设置进行属... 目录前言1、Shapefile属性字段编码的情况:一、Shp文件常见的字符集编码1、System编码

Oracle存储过程里操作BLOB的字节数据的办法

《Oracle存储过程里操作BLOB的字节数据的办法》该篇文章介绍了如何在Oracle存储过程中操作BLOB的字节数据,作者研究了如何获取BLOB的字节长度、如何使用DBMS_LOB包进行BLOB操作... 目录一、缘由二、办法2.1 基本操作2.2 DBMS_LOB包2.3 字节级操作与RAW数据类型2.

MySQL使用binlog2sql工具实现在线恢复数据功能

《MySQL使用binlog2sql工具实现在线恢复数据功能》binlog2sql是大众点评开源的一款用于解析MySQLbinlog的工具,根据不同选项,可以得到原始SQL、回滚SQL等,下面我们就来... 目录背景目标步骤准备工作恢复数据结果验证结论背景生产数据库执行 SQL 脚本,一般会经过正规的审批

kotlin中的数据转换方法(示例详解)

《kotlin中的数据转换方法(示例详解)》这篇文章介绍了Kotlin中将数字转换为字符串和字符串转换为数字的多种方法,包括使用`toString()`、字符串模板、格式化字符串、处理可空类型等,同时... 目录1. 直接使用 toString() 方法2. 字符串模板(自动转换)3. 格式化字符串(控制输