无实体店营业执照申请长沙seo网站推广

当前位置: 首页 > news >正文

无实体店营业执照申请,长沙seo网站推广,微信分销平台是什么意思,自己做同城购物网站在介绍序列化之前#xff0c;我们先来了解一下为什么要对数据进行序列化 数据序列化有以下几个主要的应用场景和目的#xff1a;

  1. 持久化存储#xff1a;序列化可以将对象或数据结构转换为字节序列#xff0c;使得其可以被存储在磁盘上或数据库中。通过序列化#xff…在介绍序列化之前我们先来了解一下为什么要对数据进行序列化 数据序列化有以下几个主要的应用场景和目的
  2. 持久化存储序列化可以将对象或数据结构转换为字节序列使得其可以被存储在磁盘上或数据库中。通过序列化我们可以将应用程序中运行时的数据持久化保存以便在后续运行时重新加载和使用。
  3. 数据传输序列化可以将对象转换为字节序列以便在网络上进行传输。通过序列化我们可以方便地将数据发送给远程服务器或其他系统实现不同系统之间的数据交互和通信。
  4. 数据缓存序列化可以将对象存储在缓存中以提高读取和访问的性能。通过序列化我们可以将经常需要使用的数据对象序列化到缓存中避免频繁地从数据库或其他存储介质中读取数据从而提高应用程序的响应速度和效率。
  5. 跨平台和版本兼容性通过序列化我们可以将对象转换为一种通用的数据格式如 XML 或 JSON使得数据在不同的平台和系统之间可以进行传递和解析。而且序列化也留下了数据的结构信息使得即使在对象结构发生变化或升级时仍能够进行兼容性处理。
  6. 调试和日志记录在调试过程中我们可以将对象的状态序列化为日志文件以便后续查看和分析。通过序列化我们可以捕获应用程序在某一特定时刻的状态并将其存储下来方便调试和故障排查。 总结来说数据序列化可以使数据在不同的环境和系统中进行存储、传输和使用以及提供持久化存储、数据交互、性能优化和兼容性处理等方面的好处。 一、序列化的概念 计算机硬盘中的文件只能保存纯数据不能直接保存对象网络传输亦是如此。在游戏存档、发送网络数据包的时候都需要先将数据转化为纯粹的二进制数据才能进行发送。反之读取存档、接收数据包的时候要进行相反的操作——把二进制数据转化为对象。 将对象转化为二进制数据的操作就叫做“序列化Seriallize”相反的过程将二进制数据转化为对象就叫做“反序列化Deseriallize”。 常用的序列化方案有以下几种 自定义二进制序列化C#提供的序列化方案JSONXMLProtoBuf 1、自定义二进制序列化 自定义二进制序列化是一种在代码级别定义对象如何转换为二进制数据的过程以及如何将二进制数据转换回对象。在Unity中通过自定义二进制序列化我们可以完全控制对象的序列化和反序列化过程以适应特定的需求。 下面是一个简单的示例演示如何自定义二进制序列化 首先我们需要为要序列化的对象创建一个自定义的数据结构。 [Serializable] public class CustomData {public int value1;public float value2;// … }然后我们可以创建一个自定义的二进制序列化器。 public static class CustomSerializer {public static byte[] Serialize(CustomData data){MemoryStream stream new MemoryStream();BinaryWriter writer new BinaryWriter(stream);// 将字段写入二进制流中writer.Write(data.value1);writer.Write(data.value2);// …writer.Close();return stream.ToArray();}public static CustomData Deserialize(byte[] data){MemoryStream stream new MemoryStream(data);BinaryReader reader new BinaryReader(stream);CustomData customData new CustomData();// 从二进制流中读取字段customData.value1 reader.ReadInt32();customData.value2 reader.ReadSingle();// …reader.Close();return customData;} } 最后我们可以使用自定义的二进制序列化器来序列化和反序列化对象。 CustomData obj new CustomData(); // 设置对象的值…byte[] serializedData CustomSerializer.Serialize(obj);// 将二进制数据存储到磁盘或发送给其他系统…CustomData deserializedObj CustomSerializer.Deserialize(serializedData);// 使用反序列化后的对象… 通过自定义二进制序列化我们可以按需存储和传输对象的状态或者与其他系统进行数据交换。在实际应用中我们可能需要考虑字节顺序、对象版本控制、数据压缩等因素以提高自定义二进制序列化的效率和可靠性。 2、C#提供的序列化方案 C# 提供了几种常用的序列化方案用于将对象转换为字节序列并进行存储、传输或持久化。下面是一些常见的 C# 序列化方案
  7. 二进制序列化Binary Serialization    C# 提供了 BinaryFormatter 类可用于将对象序列化为二进制格式并将其保存到文件或传输到其他地方。二进制序列化是一种简单而高效的方式适用于需要快速序列化和反序列化的场景。但它的二进制数据不可读也难以进行跨平台和版本兼容。
  8. XML 序列化XML Serialization    XML 序列化使用 XmlSerializer 类将对象序列化成 XML 格式。XML 是一种自描述的格式可读性较好并具备跨平台和版本兼容性。通过 XML 序列化我们可以将对象保存为 XML 文件或将 XML 数据传输给其他系统。但 XML 格式会带来一定的性能开销并且对于大型对象或复杂的数据结构XML 格式可能会产生较大的文件大小。
  9. JSON 序列化JSON Serialization    C# 中的 JSON 序列化通过 JsonSerializer 类来实现。JSONJavaScript Object Notation是一种轻量级的数据交换格式它具有可读性好、跨平台和版本兼容性并且与 Web 开发密切相关。JSON 序列化可以将对象转换为 JSON 格式进行存储、传输和与其他系统进行数据交互。相对于 XML 格式JSON 格式更加紧凑但仍然具备很好的可读性。
  10. Protobuf 序列化Protocol Buffers Serialization    Protobuf 是 Google 发布的一种高效的二进制序列化格式适用于跨平台和高性能的数据传输。在 C# 中可以使用谷歌开源的 protobuf-net库进行 Protobuf 序列化。Protobuf 的优点包括高性能、小尺寸和协议版本兼容性但其二进制数据不可读需要定义数据的结构和消息格式。 这些序列化方案根据不同的需求和场景可以选择合适的方案。一般而言二进制序列化适用于性能要求较高且不需进行数据查看的场景XML 和 JSON 序列化适用于可读性好、跨平台和版本兼容性要求较高的场景Protobuf 序列化适用于高性能和小尺寸的数据传输。 序列化的方案还有很多也可以自己定义独特的序列化方案。理论上来说只要能保存并正确读取数据的序列化方案都是合理的 二、简单存储PlayerPrefs 除了通用的序列化方法外在很多游戏和应用程序中还需要保存一些简单的游戏偏好数据Preference。如音乐音量、音效音量、屏幕分辨率等某些小游戏的最高分、游戏进度也可以用简单的方式保存在设备上。 Unity提供了PlayerPrefs以满足保存简单数据的需求。它的共嗯比较单纯用一个键字符串类型对应一个之值的类型只支持整数、浮点数和字符串3种。PlayerPrefs不擅长保存复杂数据类型其常用方法如下 当使用Unity进行游戏开发时可以使用PlayerPrefs类来保存和访问玩家的偏好设置和游戏数据。 1、以下是一些PlayerPrefs的常用方法示例
  11. 设置偏好设置或游戏数据 PlayerPrefs.SetInt(HighScore, 100); // 设置整数值PlayerPrefs.SetFloat(Volume, 0.8f); // 设置浮点数值PlayerPrefs.SetString(PlayerName, John); // 设置字符串值
  12. 获取偏好设置或游戏数据 int highScore PlayerPrefs.GetInt(HighScore); // 获取整数值float volume PlayerPrefs.GetFloat(Volume); // 获取浮点数值string playerName PlayerPrefs.GetString(PlayerName); // 获取字符串值
  13. 检查是否存在特定键 bool hasHighScore PlayerPrefs.HasKey(HighScore); // 检查是否存在HighScore键
  14. 删除特定键的偏好设置或游戏数据 PlayerPrefs.DeleteKey(HighScore); // 删除HighScore键的数据
  15. 删除所有偏好设置或游戏数据 PlayerPrefs.DeleteAll(); // 删除所有偏好设置和游戏数据 请注意PlayerPrefs类用于存储简单的键值对数据不适合存储大量复杂的游戏数据。对于大型游戏或复杂数据结构应该考虑使用其他方法如数据序列化和数据库。 2、应用实例 这里举一个能够在游戏退出时仍然保存数值的计数器 在场景中创建一个3D Text默认的3D Text有点模糊建议将Font Size设置为50然后缩小Character Size为0.2Font Size决定字符间隔大小Character Size决定字体大小创建脚本TsetPrefs经挂到3D Text上 using System.Collections; using System.Collections.Generic; using UnityEngine;//这个写法的用途是强制物体具有TextMesh组件 [RequireComponent(typeof(TextMesh))] public class TestPrefs : MonoBehaviour {int counter 0;TextMesh textMesh;void Start(){counter PlayerPrefs.GetInt(counter);textMesh GetComponentTextMesh();textMesh.textcounter.ToString();}// Update is called once per framevoid Update(){if(Input.GetButtonDown(Jump)) //按空格加一{counter;PlayerPrefs.SetInt(counter, counter);textMesh.textcounter.ToString();}if (Input.GetButtonDown(Cancel)) //按Esc清零{counter0;PlayerPrefs.SetInt(counter, counter);textMesh.text counter.ToString();}} }完成之后就可以测试计数器效果了。运行游戏按康哥可以让数字加1按Esc数字清0.停止游戏后再次启动数字会还原成上次退出时的值。 3、PlayerPrefs的实际保存位置 在Unity中PlayerPrefs的实际保存位置取决于不同的操作系统。以下是不同操作系统上PlayerPrefs的实际保存位置 1. Windows    PlayerPrefs数据在Windows系统中默认保存在注册表文件中。具体路径为    HKEY_CURRENT_USER\Software[公司名][产品名] 2. macOS    PlayerPrefs数据在macOS系统中默认保存在plist文件中。具体路径为    /Library/Preferences/[公司名].[产品名].plist 3. Linux    在Linux系统中PlayerPrefs数据默认保存在用户主目录的.config目录下。具体路径为    /.config/unity3d/[公司名]/[产品名]/ 4. iOS    在iOS设备上PlayerPrefs数据会存储在应用的沙盒目录中。具体路径取决于应用的Bundle Identifier。 5. Android    在Android设备上PlayerPrefs数据会存储在设备的Shared Preferences中并根据应用的包名进行命名并保存在应用的沙盒目录下。 需要注意的是PlayerPrefs保存的数据是以明文形式存储的因此不推荐将敏感或重要的数据直接保存在PlayerPrefs中。