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

      

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

  • 相关阅读:
    数组排序 -- 冒泡排序
    数组自带的函数(方法)
    京东官网轮播图的实现
    鼠标单击元素输出对应元素的索引号
    JavaScript中获取HTML元素的方式
    JavaScript数组的2种定义方式
    this关键字
    JavaScript中对象的3种定义方式
    Hadoop完整搭建过程(三):完全分布模式(虚拟机)
    Hadoop完整搭建过程(二):伪分布模式
  • 原文地址:https://www.cnblogs.com/baosong/p/10947084.html
Copyright © 2011-2022 走看看