各类型转字节数组 1 2 3 byte [] bytes = BitConverter.GetBytes(99 );int  i = BitConverter.ToInt32(bytes);
其他类型同理
编码格式 游戏开发中常用的编码格式:UTF-8
中文相关编码格式:GBK
英文相关编码格式:ASCII
将字符串以制定的编码格式转字节
1 2 3 byte [] bytes2 = Encoding.UTF8.GetBytes("我是紫地丁" );string  iAmPditine = Encoding.UTF8.GetString(bytes2);
文件相关操作 文件 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 public  class  Lesson2 {     [MenuItem("BinaryLearn/Lesson2" ) ]     private  static  void  Test ()     {         if  (!File.Exists(Application.dataPath + "/test.pfc" ))              File.Create(Application.dataPath + "/test.pfc" );                  byte [] bytes = BitConverter.GetBytes(999 );         File.WriteAllBytes(Application.dataPath +"/test.pfc" ,bytes);         string [] strs ={ "hello" , "紫地丁" ,"测试"  };         File.WriteAllLines(Application.dataPath +"/test2.pfc" ,strs);                           File.WriteAllText(Application.dataPath + "/test3.pfc" ,"测试测试测试\n测试测试测试" );                           byte [] bytes2 =  File.ReadAllBytes(Application.dataPath + "/test.pfc" );         Debug.Log(BitConverter.ToInt32(bytes2));     } } 
1 2 3 4 5 6 7 8 File.Delete(Application.dataPath + "/test.pfc" );  File.Copy(Application.dataPath + "/oldFile.pfc" ,Application.dataPath + "/newFile.pfc" );              File.Replace(Application.dataPath + "/newFile.pfc" ,Application.dataPath + "/targetFile.pfc" ,Application.dataPath + "/backupFile.pfc" ); 
文件流 创建文件流 方法一
1 FileStream fs = new  FileStream(Application.dataPath + "/Lesson3.pfc" , FileMode.OpenOrCreate,FileAccess.ReadWrite); 
方法二
1 FileStream fs2 = File.Create(Application.dataPath + "Lesson3.pfc" ); 
方法三
1 FileStream fs3 = File.Open(Application.dataPath + "Lesson3.pfc" , FileMode.Open); 
重要属性和方法 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 FileStream fs = File.Open(Application.dataPath + "Lesson3.pfc" , FileMode.OpenOrCreate); Debug.Log(fs.Length); Debug.Log(fs.CanRead); fs.Flush(); fs.Close(); fs.Dispose(); 
读写字节 写入
1 2 3 4 5 6 7 FileStream fs = File.Open(Application.persistentDataPath + "Lesson3.pfc" , FileMode.OpenOrCreate,FileAccess.ReadWrite); byte [] bytes = BitConverter.GetBytes(999 );byte [] bytes2 = Encoding.UTF8.GetBytes("I am Pditine" );fs.Write(bytes,0 ,4 ); fs.Write(bytes2,0 ,bytes2.Length); fs.Flush(); fs.Dispose(); 
读取
1 2 3 4 5 6 7 FileStream fs = File.Open(Application.persistentDataPath + "Lesson3.pfc" , FileMode.OpenOrCreate,FileAccess.ReadWrite); byte [] bytes = new  byte [4 ];byte [] bytes2 = new  byte [16 ];Debug.Log(fs.Read(bytes, 0 , 4 )); Debug.Log(BitConverter.ToInt32(bytes)); Debug.Log(fs.Read(bytes2, 0 , 16 )); Debug.Log(Encoding.UTF8.GetString(bytes2)); 
更加安全的使用文件流文件 1 2 3 4 5 6 7 8 9 using  (FileStream fs = File.Open(Application.persistentDataPath + "Lesson3.pfc" , FileMode.OpenOrCreate,FileAccess.ReadWrite)){     byte [] bytes = new  byte [4 ];     byte [] bytes2 = new  byte [16 ];     Debug.Log(fs.Read(bytes, 0 , 4 ));     Debug.Log(BitConverter.ToInt32(bytes));     Debug.Log(fs.Read(bytes2, 0 , 16 ));     Debug.Log(Encoding.UTF8.GetString(bytes2)); } 
文件夹 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 if  (Directory.Exists(Application.dataPath + "/数据持久化-二进制" ))    Debug.Log("存在文件夹" ); DirectoryInfo info = Directory.CreateDirectory(Application.dataPath + "/数据持久化-二进制" ); Debug.Log(info.FullName); Debug.Log(info.Name); FileInfo[] infos = info.GetFiles(); foreach  (var  finfo in  infos){     Debug.Log(finfo.Name);     Debug.Log(finfo.FullName);     Debug.Log(finfo.Length);     Debug.Log(finfo.Extension);           } Directory.Delete(Application.dataPath +"/数据持久化-二进制" ); var  strs = Directory.GetDirectories(Application.dataPath);foreach  (var  str in  strs){     Debug.Log(str); } var  strs2 = Directory.GetFiles(Application.dataPath);foreach  (var  str in  strs2){     Debug.Log(str);     } Directory.Move(Application.dataPath +"/321" ,Application.dataPath+"/123" ); 
类对象序列化 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 [Serializable ] public  struct  StructTest{     public  int  i;     public  string  s;     public  StructTest (int  i, string  s     {         this .i = i;         this .s = s;     } } [Serializable ] public  class  ClassTest {     public  int  i;     public  string  s;     public  ClassTest (int  i, string  s     {         this .i = i;         this .s = s;     } } [Serializable ] public  class  Person {     public  int  age = 1 ;     public  string  name = "紫地丁" ;     public  int [] ints = new  int [] { 1 , 2 , 3 , 4  };     public  List<int > list = new () { 1 , 2 , 3 , 4  };     public  Dictionary<int , string > dic = new () { { 1 , "123"  }, { 2 , "123"  } };     public  StructTest st = new  StructTest(2 , "321" );     public  ClassTest ct = new  ClassTest(1 , "123" ); } 
方法一 使用内存流得到二进制字节数组 1 2 3 4 5 6 7 8 using  MemoryStream ms = new ();BinaryFormatter bf = new (); bf.Serialize(ms,new  Person()); byte [] bytes = ms.GetBuffer();     File.WriteAllBytes(Application.dataPath+"/Lesson5.pfc" ,bytes);      ms.Close(); 
方法二 使用文件流进行存储 1 2 3 4 5 using  FileStream fs = new (Application.dataPath + "/Lesson5_2.pfc" , FileMode.OpenOrCreate, FileAccess.Write);BinaryFormatter bf = new (); bf.Serialize(fs,new  Person()); fs.Flush(); fs.Close(); 
类对象反序列化 反序列化文件中的数据 1 2 3 4 5 using  FileStream fs = File.Open(Application.dataPath + "/Lesson5.pfc" , FileMode.Open, FileAccess.Read);BinaryFormatter bf = new (); Person p = bf.Deserialize(fs) as  Person; fs.Close(); Debug.Log(p.name); 
反序列化网络传输来的数据 目前没有网络传输,我们还是从文件中读取
1 2 3 4 5 6 7 8 byte [] bytes = File.ReadAllBytes(Application.dataPath + "/Lesson5.pfc" );using  (MemoryStream ms = new (bytes)){     BinaryFormatter bf = new ();     Person p = bf.Deserialize(ms) as  Person;     ms.Close();     Debug.Log(p.name); } 
类对象的二进制加密 当我们将类对象转换为二进制数据时进行加密,将二进制数据转换为类对象时解密
如果第三方获取到我们的二进制数据,需要得知加密规则和解密密钥才能获取到正确的数据
加密不是100%安全,只能提高破解门槛
常用加密算法 MD5,SHA1,HMAC,AES/DES/3DES
我们一般使用已有的加密算法库以实现数据加密
使用异或加密 一个数异或一个秘钥,即可获得该数的加密数据
加密数据异或这个秘钥,即可获取原数
加密 1 2 3 4 5 6 7 8 9 10 11 12 13 Person p = new  Person();          byte  key = 238 ;          using  (MemoryStream ms = new ())          {              BinaryFormatter bf = new ();              bf.Serialize(ms,p);              byte [] bytes = ms.GetBuffer();              for  (int  i = 0 ; i < bytes.Length; i++)              {                  bytes[i] ^= key;              }              File.WriteAllBytes(Application.dataPath +"/Lesson7.pfc" ,bytes); 
解密 1 2 3 4 5 6 7 8 9 10 11 12 13 byte  key = 238 ;byte [] bytes = File.ReadAllBytes(Application.dataPath +"/Lesson7.pfc" );for  (int  i = 0 ; i < bytes.Length; i++){     bytes[i] ^= key; } using  (MemoryStream ms = new (bytes)){     BinaryFormatter bf = new ();     var  p = bf.Deserialize(ms) as  Person;     Debug.Log(p.name); }