文件的序列化和反序列化

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

⽂件的序列化和反序列化
⼯作中我们经常会⽤到序列化和反序列化,主要⽤于进⾏⽂件的读取和保存,能够更好的保存我们项⽬中所进⾏使⽤的东西:在⽇常⽣活中我们有许多⽂件都是通过⼆进制的⽅式进⾏存储,但是⼆进制的⽂件的制作需要⾸先进⾏序列化:
关于序列化的⽬的:
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;
}
}
我们可以通过上⾯的⽅法,就能够实现快速的进⾏序列化的⽂件的保存,这样就能够更加准确的保存数据和读取数据。

相关文档
最新文档