unity 序列化和反序列化

什么是序列化和反序列化
(1)序列化是指把对象转换为字节序列的过程,而反序列化是指把字节序列恢复为对象的过程;.
  (2)序列化:对象序列化的最主要的用处就是在传递和保存对象的时候,保证对象的完整性和可传递性。序列化是把对象转换成有序字节流,以便在网络上传输或者保存在本地文件中。序列化后的字节流保存了对象的状态以及相关的描述信息。序列化机制的核心作用就是对象状态的保存与重建。

(3)反序列化:客户端从文件中或网络上获得序列化后的对象字节流后,根据字节流中所保存的对象状态及描述信息,通过反序列化重建对象

(4)本质上讲,序列化就是把实体对象状态按照一定的格式写入到有序字节流,反序列化就是从有序字节流重建对象,恢复对象状态。

2、为什么需要序列化与反序列化
我们知道,当两个进程进行远程通信时,可以相互发送各种类型的数据,包括文本、图片、音频、视频等, 而这些数据都会以二进制序列的形式在网络上传送。
那么当两个进程进行通信时,能否实现进程间的对象传送呢?答案是可以的!如何做到呢?这就需要序列化与反序列化了!
换句话说,一方面,发送方需要把这个对象转换为字节序列,然后在网络上传送;另一方面,接收方需要从字节序列中恢复出对象。
当我们明晰了为什么需要Java序列化和反序列化后,我们很自然地会想序列化的好处。其好处一是实现了数据的持久化,通过序列化可以把数据永久地保存到硬盘上(通常存放在文件里),二是,利用序列化实现远程通信,即在网络上传送对象的字节序列。

总的来说可以归结为以下几点:

(1)永久性保存对象,保存对象的字节序列到本地文件或者数据库中;
(2)通过序列化以字节流的形式使对象在网络中进行传递和接收;
(3)通过序列化在进程间传递对象;

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using System; 5using Newtonsoft.Json; 6 7public class TestJSON : MonoBehaviour 8{ 9 10 void Start() 11 { 12 13 Product product = new Product(); 14 product.dic["键"] = "值"; 15 product.name = "小明"; 16 string json = JsonConvert.SerializeObject(product); 17 18 Product m = JsonConvert.DeserializeObject<Product>(json); 19 20 Debug.Log(json); 21 Debug.Log(m.name); 22 } 23 24 25 public class Product 26 { 27 public string name; 28 public Dictionary<string, string> dic = new Dictionary<string, string>(); 29 } 30 31}

TestJSON

ChatMessage

1需要导入命名空间 2using System.IO; 3using System.Xml.Serialization; 4using UnityEditor; 5 6先定义一个类: 7public class Studnet{ 8public string m_Name = "仑仑"; 9} 10 11public class SerializeDemo : MonoBehaviour { 12 13 14 void Start() 15 { 16 序列化: 17 Student student = new Student(); 18 //第一要确定储存的位置 19 //Application.dataPath就是unity中的Asset文件夹 20 StreamWriter sw = new StreamWriter(Application.dataPath + "/Demo.xml"); 21 //第二要对什么类型序列化 22 XmlSerializer xs = new XmlSerializer(typeof(Student)); 23 //第三对对象序列化 24 xs.Serialize(sw, student); 25 //关闭流 26 sw.Close(); 27 //刷新Asset文件 28 AssetDatabase.Refresh(); 29 //运行程序会在Asset目录下看到Demo.xml文件 30 31 32 反序列化 33 //第一确定对哪个文件进行反序列化 34 StreamReader sr = new StreamReader(Application.dataPath + "/Demo.xml"); 35 //第二要确定对什么类型反序列化 36 XmlSerializer xs1 = new XmlSerializer(typeof(Student)); 37 //第三反序列化 38 Student student1 = xs1.Deserialize(sr) as Student; 39 //关闭流 40 sr.Close(); 41 //会在控制台看到 “仑仑” 42 print(student1.m_Name); 43 } 44}

SerializeDemo

点赞
收藏

评论区

加载中...

相关推荐

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

java中的序列化

一、什么是java序列化  序列化:将对象写入IO流反序列化:从IO流中恢复对象序列化机制允许将实现序列化的java对象转换为字节序列,这些字节序列可以保存在磁盘上也可以通过网络传输,字节序列也可以再恢复为原来的对象。序列化机制可以让对象不依附于程序独立存在。二、应用场景

javaBean为什么要implements Serializable

一个对象序列化的接口,一个类只有实现了Serializable接口,它的对象才是可序列化的。因此如果要序列化某些类的对象,这些类就必须实现Serializable接口。而实际上,Serializable是一个空接口,没有什么具体内容,它的目的只是简单的标识一个类的对象可以被序列化。    什么情况下需要序列化:    1.     当

IOS中对象序列化与反序列化

概述在IOS中,对象的序列化和反序列化分别使用NSKeyedArchiver和NSKeyedUnarchiver两个类,我们可以把一个类对象进行序列化然后保存到文件中,使用时再读取文件,把内容反序列化出来。这个过程通常也被称为对象的编码(归档)和解码(解档)。需要注意的是,NSKeyedArchiver和NSKeyedUnarchiver是继

Java序列化(Serializable)与反序列化

序列化是干什么的简单说就是为了保存在内存中的各种对象的状态(也就是实例变量,不是方法),并且可以把保存的对象状态再读出来。虽然你可以用你自己的各种各样的方法来保存objectstates,但是Java给你提供一种应该比你自己好的保存对象状态的机制,那就是序列化。什么情况下需要序列化1.当你想把的内存中的对象状态保存到一个文件中

Android Serializable与Parcelable原理与区别

一、序列化、反序列化是什么?(1)名词解释对象的序列化:把Java(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fwww.2cto.com%2Fkf%2Fware%2FJava%2F)对象转换为字节序列并存储至一个储存媒介的过