zoukankan      html  css  js  c++  java
  • 文件的序列化和反序列化

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

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

    关于序列化的目的:

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

      

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

  • 相关阅读:
    K
    CFileDialog的用法
    MFC编辑框换行实现
    MFC通过对话框窗口句柄获得对话框对象指针
    AfxGetMainWnd()函数用法
    this指针和m_hWnd的区别
    WinAPI: FindWindow、FindWindowEx
    深入浅出Hibernate(二)多对一关系映射
    JAVA 并发编程-读写锁之模拟缓存系统(十一)
    很easy的js双向绑定框架(二):控制器继承
  • 原文地址:https://www.cnblogs.com/baosong/p/10947084.html
Copyright © 2011-2022 走看看