2进制管理器的使用

这个 BinaryDataMgr 是一个用于管理二进制数据的工具类,主要功能是将数据存储为二进制文件,读取二进制数据并将其转换为对象,以及管理与 Excel 表相关的数据。它使用单例模式确保在整个应用程序中只有一个实例。

核心功能概述:

  1. 加载二进制数据:从指定的二进制文件中读取数据,将其解析为对象并存入容器。
  2. 获取容器数据:根据容器类名称获取对应的表数据。
  3. 存储对象数据:将对象数据序列化为二进制文件并保存到指定路径。
  4. 读取对象数据:从二进制文件中读取数据并反序列化为对象。

构造函数与初始化

  • BinaryDataMgr():构造函数,调用 InitData() 方法以初始化数据。

公有方法解释:

  1. InitData()

    • 用于初始化数据。这里的示例中调用了 LoadTable<TowerInfoContainer, TowerInfo>() 方法以加载 TowerInfo 表的二进制数据到内存中。
  2. LoadTable<T, K>()

    • 加载指定类型 K 的数据结构类对应的二进制数据,并将其解析为容器类型 T 的对象。
    • 它通过文件流读取二进制数据,反序列化每一行的数据并添加到字典中。
  3. GetTable<T>()

    • 获取指定容器类型 T 的数据。如果数据存在,返回相应的对象;否则返回 null
  4. Save(object obj, string fileName)

    • 将给定对象 obj 序列化并保存到指定文件名的二进制文件中。
    • 确保存储路径存在,如果不存在则创建。
  5. 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}");
        }
    }
}

流程说明:

  1. 初始化数据

    • 通过 binaryDataMgr.InitData() 加载 TowerInfo 表的二进制数据。
  2. 获取塔信息

    • 使用 binaryDataMgr.GetTable<TowerInfoContainer>() 获取 TowerInfoContainer 对象。
  3. 遍历塔信息

    • 遍历 dataDic 字典,输出所有塔的信息。
  4. 保存新的塔信息

    • 创建一个新的 TowerInfo 对象并将其添加到 dataDic 字典中。
    • 调用 binaryDataMgr.Save(towerInfoContainer, "TowerInfoContainer") 将容器保存为二进制文件。
  5. 读取保存的塔信息

    • 使用 binaryDataMgr.Load<TowerInfoContainer>("TowerInfoContainer") 读取之前保存的塔信息。
  6. 输出加载的塔信息

    • 遍历并输出加载后的塔的信息。

优点:

  • 通过二进制文件存储数据,提高了读写效率。
  • 使用反射简化了数据的加载和存储过程。
  • 可以轻松扩展以支持其他数据类型,只需添加新的数据结构和容器类即可。
  • 需要按照规则使用Excel
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值