• 文件的序列化和反序列化


    工作中我们经常会用到序列化和反序列化,主要用于进行文件的读取和保存,能够更好的保存我们项目中所进行使用的东西:

    在日常生活中我们有许多文件都是通过二进制的方式进行存储,但是二进制的文件的制作需要首先进行序列化:

    关于序列化的目的:

    1、以某种存储形式使自定义对象持久化;

    2、将对象从一个地方传递到另一个地方。

    3、使程序更具维护性。

    脚本的字段需要满足什么条件才能被序列化?(必须同时满足)

    1. public 类型,或者有 [SerializeField]

    2. 不是 static

    3. 不是 const

    4. 不是 readonly

    5. 类型必须是 Unity 可以序列化的类型

    Unity 可以序列化哪类型?

    1. 自定义的,非 abstract 的类,且有 [Serializable]

    2. 有 [Serializable] 的结构体

    3. UnityEngine.Object 的子类的引用

    4. 原生类型(int,float,double,bool,string, etc)

    5. 以上类型的数组

    6. 以上类型的 List<T>

    下面是进行文件的序列化和反序列化的代码

    /// <summary>
    /// 关于进行文件的序列化
    /// </summary>
    public static byte[] SerializeToByteArray(this object obj)
    {
        if (obj == null)
        {
            return null;
        }
        var bf = new BinaryFormatter();
        using (var ms = new MemoryStream())
        {
            bf.Serialize(ms, obj);
            return ms.ToArray();
        }
    }
    /// <summary>
    /// 进行文件的反序列化
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <param name="byteArray"></param>
    /// <returns></returns>
    public static T Deserialize<T>(this byte[] byteArray) where T : class
    {
        if (byteArray == null)
        {
            return null;
        }
        using (var memStream = new MemoryStream())
        {
            var binForm = new BinaryFormatter();
            memStream.Write(byteArray, 0, byteArray.Length);
            memStream.Seek(0, SeekOrigin.Begin);
            var obj = (T)binForm.Deserialize(memStream);
            return obj;
        }
    }
    

      

    我们可以通过上面的方法,就能够实现快速的进行序列化的文件的保存,这样就能够更加准确的保存数据和读取数据!!!!!!!

  • 相关阅读:
    构建之法阅读笔记2
    2020.2.10
    2020.2.9
    2020.2.8
    2020.2.7
    2020.2.6
    2020.2.5
    学习进度——第十三周
    PHPStorm+XAMPP开发php项目
    第一阶段成果建议
  • 原文地址:https://www.cnblogs.com/baosong/p/10947084.html
Copyright © 2020-2023  润新知