序列化、反序列化(Serializable特性)
//需要被实例化的类
using System.Collections;
using UnityEngine; [Serializable]
public class SerializableClass : MonoBehaviour
{
public string name; public SerializableClass(string name)
{
this.name = name;
}
}
using System.Collections;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
using UnityEngine; public class SerializableTest : MonoBehaviour
{
public SerializableClass serializableClass; private void Start()
{
this.serializableClass = new serializableClass("cat");
} private void OnGUI()
{
if (GUI.Button(new Rect(10,10,150,100),"Serialize"))
{
string fileName = "Assets/SerializableClass.dat";
Stream fStream = new FileStream(fileName,FileMode.Create,FileAccess.ReadWrite);
BinaryFormatter binFormat = new BinaryFormatter();
binFormat.Serialize(fStream,this.serializableClass);
fStream.Close();
this.serializableClass.name = "dog";
Debug.Log("the class name is : " + this.serializableClass.name);
}
if (GUI.Button(new Rect(300,10,150,100),"Deserialize")
{
string fileName = "Assets/SerializableClass.dat";
Stream fStream = new FileStream(fileName,FileMode.Open,FileAccess.Read);
BinaryFormatter binFormat = new BinaryFormatter();
this.serializableClass = binFormat.Deserialize(fStream) as SerializableClass;
fStream.Close();
Debug.Log("the class name is : " + this.serializableClass.name);
}
}
}
在此脚本中,我们首先在Start方法中实例化了一个SerializableClass类的对象,名为serializableClass。然后通过OnGUI方法中创建两个按钮分别执行序列化和反序列化的操作。
在序列化部分,将SerializableClass的实例序列化为二进制文件,保存到"Assets/SerializableClass.dat",此时被序列化为二进制的对象的name字段内容为“cat”。下面将该字段的内容修改为“dog”,这时,变量SerializableClass的name字段已经从“cat”变为了“dog”。
然后在反序列化的部分,将"Assets/SerializableClass.dat"这个二进制文件反序列化为类的实例。由于二进制中对应的类的实例的name字段仍为“cat”,将反序列化后的类实例赋值给seri变量,此时serializableClass变量就成了修改name字段之前的serializableClass变量了。
声明:此博客为个人学习之用,如与其他作品雷同,纯属巧合,并请明示指出
序列化、反序列化(Serializable特性)的更多相关文章
- .net 序列化 与反序列化 Serializable
序列化:序列化指的是 将对象 通过流的方式 保存为一个文件. 反序列化则是将该文件还原成 对象的过程. 序列化的作用:序列化可以跨语言跨平台 传输数据,将某一对象序列化成通用的文件格式在进行传输. 比 ...
- Java序列化与反序列化(Serializable)
Java序列化与反序列化(Serializable) 特别注意: 1.要序列化的类必须实现Serializable借口 2.在反序列化(读取对象)的时候必须额外捕获EOFException 3.序列化 ...
- C#之你懂得的序列化/反序列化
前言:写此文章一方面是为了巩固对序列化的认识,另一方面是因为本人最近在面试,面试中被问到“为什么要序列化”.虽然一直在使用,自己也反复的提到序列化,可至于说为什么要序列化,还真的没想过,所以本文就这样 ...
- C#序列化/反序列化
序列化:将实体类以二进制或者XML的形式保存到磁盘或者内存中. 反序列化:将序列化的二进制文件和XML文件解析成实体类. 例如下面的二进制序列化与反系列化: using System; using S ...
- c#序列化反序列化工具(json,binary,xml)
using System; using System.Text; using System.IO; using System.Runtime.Serialization.Formatters.Bina ...
- C# 特性(Attribute)之Serializable特性
转载自:https://www.cnblogs.com/GreenLeaves/p/6753261.html 介绍之前,先说一个重要的知识点: Serializable属性并不序列化类,它只是一个标签 ...
- 序列化反序列化api(入门级)
定义: java序列化是指把Java对象转换为字节序列的过程:而Java反序列化是指把字节序列恢复为Java对象的过程. 为什么字符串通常也会进行序列化? 对象需要进行序列化的原因:保证对象的状态不变 ...
- java io系列06之 序列化总结(Serializable 和 Externalizable)
本章,我们对序列化进行深入的学习和探讨.学习内容,包括序列化的作用.用途.用法,以及对实现序列化的2种方式Serializable和Externalizable的深入研究. 转载请注明出处:http: ...
- Java序列化之Serializable
Java的序列化流程如下: Java的反序列化流程如下: 注意:并不是所有类都需要进行序列化,主要原因有两个 1)安全问题.Java中有的类属于敏感类,此类的对象数据不便对外公开,而序列化的对象数据很 ...
- java序列化反序列化深入探究
When---什么时候需要序列化和反序列化: 简单的写一个hello world程序,用不到序列化和反序列化.写一个排序算法也用不到序列化和反序列化.但是当你想要将一个对象进行持久化写入文件,或者你想 ...
随机推荐
- Docker镜像的构成__Dockerfile
相比docker commit来说,Dockerfile的方法会更加自动化,更加方便快捷,而且功能也更强大.拿构建Nginx容器举例. 先创建一个目录 mkdir /opt/docker-file 进 ...
- SharedPreferences封装类
最近一直在读马伟奇老师的简书,给人以不一样的感觉,接下来的时间会做做笔记,毕竟好东西变成自己的才有用 原文地址SharedPreferencesUtils 依赖 dependencies { comp ...
- HDU - 1175 bfs
思路:d[x][y][z]表示以z方向走到(x, y)的转弯次数. 如果用优先队列会超时,因为加入队列的节点太多,无用的节点不能及时出队,会造成MLE,用单调队列即可. AC代码 #include & ...
- 30分钟掌握ES6/ES2015核心内容(下)
在 30分钟掌握ES6/ES2015核心内容(上)我们讲解了es6最常用的一些语法:let, const, class, extends, super, arrow functions, templa ...
- DQL、DML、DDL、DCL
二. SQL语言的分类 SQL语言共分为四大类:数据查询语言DQL,数据操纵语言DML,数据定义语言DDL,数据控制语言DCL. 1. 数据查询语言DQL数据查询语言DQL基本结构是由SELECT子句 ...
- Android Scheme协议与应用全解析
URL Scheme 的作用 客户端应用可以向操作系统注册一个 URL Scheme,该 Scheme 用于从浏览器或其他应用中启动本应用. 通过指定的 URL 字段,可以让应用在被调起后直接打开某些 ...
- Java报SQLException
Java报SQLException 具体错误如下: java.sql.SQLException:Column count doesn't match value count at row 1
- vxworks下的串口测试程序
VXWORKS串口设置说明: 一般有这么几步: 打开串口 设置串口raw模式,清空输入输出的缓冲区 设置波特率,数据位,停止位,校验方式 便可以开始读和写 打开串口: fd = open(" ...
- Filter的注册2
既然Filter是一种COM组件,使用前就必须先注册.Filter的注册程序为regsvr32.exe (位于操作系统目录的system32子目录下).假设现在有一个Filter文件,它的完整路径为C ...
- TOJ 4120 Zombies VS Plants
链接:http://acm.tju.edu.cn/toj/showp4120.html 4120. Zombies VS Plants Time Limit: 1.0 Seconds Memo ...