Unity数据持久化-序列化反序列化

序列化:把对象转化为可传输的字节序列过程称为序列化。通俗说就是将一个对象的状态(各个属性量)保存起来,然后在适当的时候再获得。
在这里插入图片描述

反序列化:把字节序列还原为对象的过程称为反序列化。

序列化目的:以某种存储形式使自定义对象持久化,将对象从一个地方传递到另一个地方,为了对象可以跨平台存储,和进行网络传输(凡是需要进行“跨平台存储”和”网络传输”的数据,都需要进行序列化)

常见的序列化方式有:JDK(不支持跨语言)、JSON、XML、Hessian、Kryo(不支持跨语言)、Thrift、Protostuff、FST(不支持跨语言)

C#对于文件的操作:
一个 文件 是一个存储在磁盘中带有指定名称和目录路径的数据集合。当打开文件进行读写时,它变成一个 流。
有两个主要的流:输入流 和 输出流。输入流用于从文件读取数据(读操作),输出流用于向文件写入数据(写操作)
在这里插入图片描述

使用方法:
一般使用流程:创建一个二进制格式化对象,新建文件流(指定路径,要写进哪里),序列化对象,关闭文件流
创建一个可序列化的类:添加特性
在这里插入图片描述

赋值:
在这里插入图片描述

序列化:(此处放在桌面,方便观察文件是否创建,建议使用Appication.persistentDataPath)
Appication.persistentDataPath:
【Window】%userprofile%\AppData\Local\Packages<productname>\LocalState
【IOS】/var/mobile/Containers/Data/Application//Documents
【Andriod】/storage/emulated/0/Android/data//files旧设备会在SD卡中
在这里插入图片描述

运行,打开文件
在这里插入图片描述

尝试加载:
在这里插入图片描述

总结:核心方法
【保存】用二进制格式化的序列化方法来序列化Save对象
BinaryFormatter.Serialize(FileStream _fileStream, Object _object)
【读取】二进制格式化程序的反序列化方法,将文件流转换为一个save对象
Save save = (Save)BinaryFormatter.Deserialize(FileStream _fileStream);

using System; //需要用到MemoryStream using System.IO; using UnityEngine; //引入ProtoBuf命名空间 using ProtoBuf; /// /// 测试类 /// public class TestProtobuf : MonoBehaviour { /// /// 用于测试的数据类 /// [ProtoContract] //声明这个类能被序列化 public class UserData { //声明每一个需要被序列化的成员,编号从1开始 [ProtoMember(1)] public int id; [ProtoMember(2)] public string name; [ProtoMember(3)] public int level; } //测试代码 void Start() { //将要被序列化的UserData示例 UserData user1 = new UserData (); user1.id = 1; user1.name = "User1"; user1.level = 10; //打印user1 Debug.Log (string.Format ("user1-> id:{0}, name:{1}, level:{2}", user1.id, user1.name, user1.level)); //序列化 byte[] buff = null; using (MemoryStream ms = new MemoryStream ()) { Serializer.Serialize (ms, user1); ms.Position = 0; int length = (int)ms.Length; buff = new byte[length]; ms.Read (buff, 0, length); } //输出字节数组 Debug.Log (string.Format("Serialized data-> {0}", BitConverter.ToString(buff))); //反序列化 UserData user2 = default(UserData); using (MemoryStream ms = new MemoryStream (buff)) { user2 = Serializer.Deserialize (ms); } //打印反序列化生成的user2 Debug.Log (string.Format ("user2-> id:{0}, name:{1}, level:{2}", user2.id, user2.name, user2.level)); } } 作者:qufangliu 链接:https://www.jianshu.com/p/d9be1b3d2446 來源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值