【问题标题】:Checking if Binary Formatter's Serialize has finished检查二进制格式化程序的序列化是否完成
【发布时间】:2018-11-16 20:32:16
【问题描述】:

是否可以检查二进制格式化程序的 Serialize() 是否已完成对文件的写入?我正在尝试在 Unity 中创建一个保存/加载系统,并决定使用二进制格式化程序,但我不确定如何检查序列化是否完成。我不希望玩家在游戏仍在加载时退出游戏,最好在保存(序列化)完成时通知玩家,然后他们才能继续。

如果需要一些代码:

    BinaryFormatter binaryFormatter = new BinaryFormatter();
    FileStream fileStream = new FileStream(Application.persistentDataPath + "/player.sav", FileMode.Create);

    PlayerData playerData = new PlayerData(player);
    binaryFormatter.Serialize(fileStream, playerData);
    fileStream.Close();

【问题讨论】:

    标签: c# unity3d serialization save binaryformatter


    【解决方案1】:

    我们在我公司所做的,是每次写入磁盘时,我们都会写入一个临时位置,并且只有在完整操作完成后,我们才会执行文件移动/替换操作。

    这是最安全和最简单的实现方式。如果用户退出并且仍在写入,则不会有任何损坏。

    此外,如果在写入过程中出现任何异常,则不会损坏任何内容。

    【讨论】:

    • 就异常而言,使用 try catch finally 几乎可以保证序列化完成?我完全忘记了使用异常。另外,在继续之前,您是如何确保保存完成的?我注意到你说你把它写到一个临时位置然后移动它,但这不会仍然需要时间(即使它非常快)?
    • 我还是不太清楚序列化(保存)完成时如何通知玩家。
    • 一旦你完全关闭了流——然后你可以通知
    • 临时位置也很好,以防您的序列化程序损坏,您不必重新创建程序状态,您可以重新加载(旧的,未损坏的)保存并重试。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 2020-08-24
    • 2010-12-10
    相关资源
    最近更新 更多