👨💻个人主页:@元宇宙-秩沅
👨💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅!
👨💻 本文由 秩沅 原创
👨💻 专栏交流 | 🧧 |
---|---|
🟥Unity100个实战基础✨ | 🎁 |
🟦 Unity100个精华一记✨ | 🎁 |
🟩 Unity50个demo案例教程✨ | 🎁 |
🟨 Unity100个精华细节BUG✨ | 🎁 |
文章目录
- ⭐前言⭐
- 🎶(==1==) 数据相互转换
- 🎶(==2==) 文件操作
- 🎶(==3==) 文件夹操作
- 🎶(==4==) 序列化
- 🎶(==5==) 反序列化
- 🎶(==6==)二进制加密
- 🎶(==7==) BinaryData管理器
- ⭐🅰️系统路线学习点击跳转⭐
⭐前言⭐
有符号 sbyte int short long
无符号 byte uint ushort ulong
浮点 float double decimal
特殊 bool char string
变量的本质是2进制,内存中以字节的形式存储,sizeof方法可以看到常用变量类型占用的字节空间长度
sizeof(sbyte)
sizeof(long) …
- 节约存储空间,提升效率
- 提升安全性
🎶(1) 数据相互转换
-
在Unity中各类型数据和字节数据相互转换
-
1.将各类型转字节
byte[] bytes = BitConverter.GetBytes(256);
- 2.字节数组转各类型
int i = BitConverter.ToInt32(bytes, 0);
为保证编码的正确性,编码要规范化、标准化,即需有标准的编码格式。
在C#中有一个专门的编码格式类 来帮助我们将字符串和字节数组进行转换
游戏开发中常用编码格式 UTF-8
中文相关编码格式 GBK
英文相关编码格式 ASCII
- 1.将字符串以指定编码格式转字节
byte[] bytes = Encoding.UTF8.GetBytes("你好");
- 2.字节数组以指定编码格式转字符串
string str = Encoding.UTF8.GetString(bytes);
🎶(2) 文件操作
命名空间: System.IO
- 1.判断文件是否存在
if(File.Exists(Application.dataPath + "/Text")){//存在}
- 2.创建文件
FileStream fstream = File.Create(Application.dataPath + "/text");
- 3.写入文件
//字节数组 写入到指定路径的文件中byte[] bytes = BitConverter.GetBytes(100);File.WriteAllBytes(Application.dataPath + "/text", bytes);//string数组内容 一行行写入到指定路径中
string[] strs = new string[] { "姓名", "你好", "1", "23"};
File.WriteAllLines(Application.dataPath + "/text", strs);//字符串写入指定路径
File.WriteAllText(Application.dataPath + "/text", "xahhll");
- 4.读取文件
//读取字节数据bytes = File.ReadAllBytes(Application.dataPath + "/text");print(BitConverter.ToInt32(bytes, 0));//读取所有行信息
strs = File.ReadAllLines(Application.dataPath + "/text");for (int i = 0; i < strs.Length; i++){print(strs[i]);}//读取所有文本信息
print(File.ReadAllText(Application.dataPath + "/text"));
- 5.删除文件
File.Delete(Application.dataPath + "/text");//文件前提是关闭的
- 6.复制文件
参数一:现有文件 需要是流关闭状态
参数二:目标文件File.Copy(Application.dataPath + "/text", Application.dataPath + "/text2", true);
- 7.文件替换
//参数一:用来替换的路径//参数二:被替换的路径//参数三:备份路径File.Replace(Application.dataPath + "/text", Application.dataPath + "/text2", Application.dataPath + "/备份text");
- 8.以流的形式 打开文件并写入或读取
//参数一:路径
//参数二:打开模式
//参数三:访问模式
FileStream fs = File.Open(Application.dataPath + "/text",
FileMode.OpenOrCreate, FileAccess.ReadWrite);
🎶(3) 文件夹操作
命名空间:using System.IO
作用:增删查改文件夹
- 1.判断文件夹是否存在
if( Directory.Exists(Application.dataPath + "/文件夹名"))
{print("存在");
}
- 2.创建文件夹
DirectoryInfo info = Directory.CreateDirectory(Application.dataPath + "/文件夹名");
- 3.删除文件夹
//参数一:路径
//参数二:true,将删除整个目录,false,仅当该目录为空时才删除
Directory.Delete(Application.dataPath + "/文件夹名");
- 4.查找文件夹和文件
//得到所有文件夹名
string[] strs = Directory.GetDirectories(Application.dataPath);
for (int i = 0; i < strs.Length; i++)
{print(strs[i]);
}
//得到所有文件名
strs = Directory.GetFiles(Application.dataPath);
for (int i = 0; i < strs.Length; i++)
{print(strs[i]);
}
- 5.移动文件夹
//移动会把文件夹中的所有内容一起移到新的路径
Directory.Move(Application.dataPath + "/文件夹名", Application.dataPath + "/路径");//该路径下面需为空
- 6.创建文件夹方法的返回值
DirectoryInfo Info = Directory.CreateDirectory(Application.dataPath + "/文件夹名");
//全路径
print(Info .FullName);
//文件名
print(Info .Name);
- 7.查找上级文件夹信息
Info = Directory.GetParent(Application.dataPath + "/文件夹名");
//全路径
print(Info .FullName);
//文件名
print(Info .Name);
- 8.得到所有子文件夹的目录信息
DirectoryInfo[] dInfos = Info.GetDirectories();
FileInfo[] fInfos = dInfo.GetFiles();
for (int i = 0; i < fInfos.Length; i++)
{print("**************");print(fInfos[i].Name);//文件名print(fInfos[i].FullName);//路径print(fInfos[i].Length);//字节长度print(fInfos[i].Extension);//后缀名
}
🎶(4) 序列化
序列化类对象
- 1.第一步申明类对象
注意:如果要使用C#自带的序列化2进制方法
申明类时需要添加[System.Serializable]特性
- 第二步—将对象进行2进制序列化
Person p = new Person(); //主要方法:序列化方法 Serializeusing (MemoryStream ms = new MemoryStream()){//2进制格式化程序BinaryFormatter bf = new BinaryFormatter();//序列化对象 生成2进制字节数组 写入到内存流当中bf.Serialize(ms, p);//得到对象的2进制字节数组byte[] bytes = ms.GetBuffer();//存储字节File.WriteAllBytes(Application.dataPath + "/文件", bytes);//关闭内存流ms.Close();}
方法二:使用文件流进行存储
主要用于存储到文件中
Person p = new Person(); using (FileStream fs = new FileStream(Application.dataPath + "/文件名", FileMode.OpenOrCreate, FileAccess.Write)){//2进制格式化程序BinaryFormatter bf = new BinaryFormatter();//序列化对象 生成2进制字节数组 写入到内存流当中bf.Serialize(fs, p);fs.Flush();fs.Close();}}
}
🎶(5) 反序列化
- 1.反序列化文件中数据
using (FileStream fs = File.Open(Application.dataPath + "/文件名", FileMode.Open, FileAccess.Read)){//申明一个 2进制格式化类BinaryFormatter bf = new BinaryFormatter();//反序列化Person p = bf.Deserialize(fs) as Person;fs.Close();}
- 2.反序列化网络传输过来的2进制数据
没有网络传输 就直接从文件中获取
byte[] bytes = File.ReadAllBytes(Application.dataPath + "/文件名");//申明内存流对象 一开始就把字节数组传输进去using (MemoryStream ms = new MemoryStream(bytes)){//申明一个 2进制格式化类BinaryFormatter bf = new BinaryFormatter();//反序列化Person p = bf.Deserialize(ms) as Person;ms.Close();}
🎶(6)二进制加密
- 简单的异或加密和解密
Person p = new Person();byte key = 199;using (MemoryStream ms = new MemoryStream()){BinaryFormatter bf = new BinaryFormatter();bf.Serialize(ms, p);byte[] bytes = ms.GetBuffer();//异或加密for (int i = 0; i < bytes.Length; i++){bytes[i] ^= key;}File.WriteAllBytes(Application.dataPath + "/文件夹名", bytes);}//解密byte[] bytes2 = File.ReadAllBytes(Application.dataPath + "/文件夹名");for (int i = 0; i < bytes2.Length; i++){bytes2[i] ^= key;}using (MemoryStream ms = new MemoryStream(bytes2)){BinaryFormatter bf = new BinaryFormatter();Person p2 = bf.Deserialize(ms) as Person;ms.Close();}
🎶(7) BinaryData管理器
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Reflection;
using System.Runtime.Serialization.Formatters.Binary;
using System.Text;
using UnityEngine;/// <summary>
/// 2进制数据管理器
/// </summary>
public class BinaryDataMgr
{/// <summary>/// 2进制数据存储位置路径/// </summary>public static string DATA_BINARY_PATH = Application.streamingAssetsPath + "/Binary/";/// <summary>/// 用于存储所有Excel表数据的容器/// </summary>private Dictionary<string, object> tableDic = new Dictionary<string, object>();/// <summary>/// 数据存储的位置/// </summary>private static string SAVE_PATH = Application.persistentDataPath + "/Data/";private static BinaryDataMgr instance = new BinaryDataMgr();public static BinaryDataMgr Instance => instance;//------后续代码请私信获取——————————————————————————
}
⭐🅰️系统路线学习点击跳转⭐
👨💻 Unity程序基础学习路线 | 🧧 |
---|---|
⭐【Unityc#专题篇】之c#进阶篇】 | 🎁 |
⭐【Unityc#专题篇】之c#核心篇】 | 🎁 |
⭐【Unityc#专题篇】之c#基础篇】 | 🎁 |
⭐【Unity-c#专题篇】之c#入门篇】 | 🎁 |
⭐【Unityc#专题篇】—进阶章题单实践练习 | 🎁 |
⭐【Unityc#专题篇】—基础章题单实践练习 | 🎁 |
⭐【Unityc#专题篇】—核心章题单实践练习 | 🎁 |
你们的点赞👍 收藏⭐ 留言📝 关注✅是我持续创作,输出优质内容的最大动力!、