文件的序列化和反序列化


工作中我們經常會用到序列化和反序列化,主要用於進行文件的讀取和保存,能夠更好的保存我們項目中所進行使用的東西:

在日常生活中我們有許多文件都是通過二進制的方式進行存儲,但是二進制的文件的制作需要首先進行序列化:

關於序列化的目的:

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;
    }
}

  

我們可以通過上面的方法,就能夠實現快速的進行序列化的文件的保存,這樣就能夠更加准確的保存數據和讀取數據!!!!!!!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM