这个 BinaryDataMgr
是一个用于管理二进制数据的工具类,主要功能是将数据存储为二进制文件,读取二进制数据并将其转换为对象,以及管理与 Excel 表相关的数据。它使用单例模式确保在整个应用程序中只有一个实例。
核心功能概述:
- 加载二进制数据:从指定的二进制文件中读取数据,将其解析为对象并存入容器。
- 获取容器数据:根据容器类名称获取对应的表数据。
- 存储对象数据:将对象数据序列化为二进制文件并保存到指定路径。
- 读取对象数据:从二进制文件中读取数据并反序列化为对象。
构造函数与初始化
BinaryDataMgr()
:构造函数,调用InitData()
方法以初始化数据。
公有方法解释:
-
InitData()
- 用于初始化数据。这里的示例中调用了
LoadTable<TowerInfoContainer, TowerInfo>()
方法以加载TowerInfo
表的二进制数据到内存中。
- 用于初始化数据。这里的示例中调用了
-
LoadTable<T, K>()
- 加载指定类型
K
的数据结构类对应的二进制数据,并将其解析为容器类型T
的对象。 - 它通过文件流读取二进制数据,反序列化每一行的数据并添加到字典中。
- 加载指定类型
-
GetTable<T>()
- 获取指定容器类型
T
的数据。如果数据存在,返回相应的对象;否则返回null
。
- 获取指定容器类型
-
Save(object obj, string fileName)
- 将给定对象
obj
序列化并保存到指定文件名的二进制文件中。 - 确保存储路径存在,如果不存在则创建。
- 将给定对象
-
Load<T>(string fileName)
- 从指定的二进制文件中读取数据并反序列化为指定类型
T
的对象。如果文件不存在,则返回类型T
的默认值。
- 从指定的二进制文件中读取数据并反序列化为指定类型
示例用例
假设我们有一个表示塔的信息的数据结构 TowerInfo
和一个用于管理 TowerInfo
数据的容器 TowerInfoContainer
,我们将使用 BinaryDataMgr
管理这些数据。
数据结构与容器类
[Serializable]
public class TowerInfo
{public int id;public string name;public float damage;
}[Serializable]
public class TowerInfoContainer
{public Dictionary<int, TowerInfo> dataDic = new Dictionary<int, TowerInfo>();
}
使用示例
void Start()
{BinaryDataMgr binaryDataMgr = BinaryDataMgr.Instance;// 加载塔的信息binaryDataMgr.InitData();// 假设我们已经有二进制文件存储了塔的信息TowerInfoContainer towerInfoContainer = binaryDataMgr.GetTable<TowerInfoContainer>();if (towerInfoContainer != null){// 遍历并输出塔的信息foreach (var tower in towerInfoContainer.dataDic){Debug.Log($"ID: {tower.Key}, Name: {tower.Value.name}, Damage: {tower.Value.damage}");}}// 假设我们有一个新的塔信息需要保存TowerInfo newTower = new TowerInfo{id = 1,name = "Fire Tower",damage = 100f};// 将新的塔信息保存为二进制数据towerInfoContainer.dataDic[newTower.id] = newTower;binaryDataMgr.Save(towerInfoContainer, "TowerInfoContainer");// 读取保存的塔信息TowerInfoContainer loadedTowerInfoContainer = binaryDataMgr.Load<TowerInfoContainer>("TowerInfoContainer");if (loadedTowerInfoContainer != null){foreach (var tower in loadedTowerInfoContainer.dataDic){Debug.Log($"Loaded ID: {tower.Key}, Name: {tower.Value.name}, Damage: {tower.Value.damage}");}}
}
流程说明:
-
初始化数据:
- 通过
binaryDataMgr.InitData()
加载TowerInfo
表的二进制数据。
- 通过
-
获取塔信息:
- 使用
binaryDataMgr.GetTable<TowerInfoContainer>()
获取TowerInfoContainer
对象。
- 使用
-
遍历塔信息:
- 遍历
dataDic
字典,输出所有塔的信息。
- 遍历
-
保存新的塔信息:
- 创建一个新的
TowerInfo
对象并将其添加到dataDic
字典中。 - 调用
binaryDataMgr.Save(towerInfoContainer, "TowerInfoContainer")
将容器保存为二进制文件。
- 创建一个新的
-
读取保存的塔信息:
- 使用
binaryDataMgr.Load<TowerInfoContainer>("TowerInfoContainer")
读取之前保存的塔信息。
- 使用
-
输出加载的塔信息:
- 遍历并输出加载后的塔的信息。
优点:
- 通过二进制文件存储数据,提高了读写效率。
- 使用反射简化了数据的加载和存储过程。
- 可以轻松扩展以支持其他数据类型,只需添加新的数据结构和容器类即可。
- 需要按照规则使用Excel