原文地址:http://blog.csdn.net/dingkun520wy/article/details/49386507
(一)简单数据存储PlayerPrefs
这种存储方法比较简单直接上代码
//简单数据存储 public void SimpleLocalStorage() { //存储信息 PlayerPrefs.SetString("TestString", "存储"); PlayerPrefs.SetInt("TestInt", 8); PlayerPrefs.SetFloat("TestFloat", 8.8F); //获取信息 PlayerPrefs.GetString("TestString"); PlayerPrefs.GetInt("TestInt"); PlayerPrefs.GetFloat("TestFloat"); //判断是否有信息 if (PlayerPrefs.HasKey("TestString")) { //删除信息 PlayerPrefs.DeleteKey("TestString"); PlayerPrefs.DeleteKey("TestInt"); PlayerPrefs.DeleteKey("TestFloat"); } //删除所有 PlayerPrefs.DeleteAll(); }
(二)Xml数据存储
首先是定义数据对象和Xml格式字符串相互转换的函数
/// 数据对象转换xml字符串 public string SerializeObject(object pObject, System.Type ty) { string XmlizedString = null; MemoryStream memoryStream = new MemoryStream(); XmlSerializer xs = new XmlSerializer(ty); XmlTextWriter xmlTextWriter = new XmlTextWriter(memoryStream, Encoding.UTF8); xs.Serialize(xmlTextWriter, pObject); memoryStream = (MemoryStream)xmlTextWriter.BaseStream; XmlizedString = UTF8ByteArrayToString(memoryStream.ToArray()); return XmlizedString; } /// xml字符串转换数据对象 public object DeserializeObject(string pXmlizedString, System.Type ty) { XmlSerializer xs = new XmlSerializer(ty); MemoryStream memoryStream = new MemoryStream(StringToUTF8ByteArray(pXmlizedString)); XmlTextWriter xmlTextWriter = new XmlTextWriter(memoryStream, Encoding.UTF8); return xs.Deserialize(memoryStream); } //UTF8字节数组转字符串 public string UTF8ByteArrayToString(byte[] characters) { UTF8Encoding encoding = new UTF8Encoding(); string constructedString = encoding.GetString(characters); return (constructedString); } //字符串转UTF8字节数组 public byte[] StringToUTF8ByteArray(String pXmlString) { UTF8Encoding encoding = new UTF8Encoding(); byte[] byteArray = encoding.GetBytes(pXmlString); return byteArray; }
/// 创建文本文件 public void CreateTextFile(string fileName, string strFileData, bool isEncryption) { StreamWriter writer; //写文件流 string strWriteFileData; if (isEncryption) { strWriteFileData = Encrypt(strFileData); //是否加密处理 } else { strWriteFileData = strFileData; //写入的文件数据 } writer = File.CreateText(fileName); writer.Write(strWriteFileData); writer.Close(); //关闭文件流 } /// 读取文本文件 public string LoadTextFile(string fileName, bool isEncryption) { StreamReader sReader; //读文件流 string dataString; //读出的数据字符串 sReader = File.OpenText(fileName); dataString = sReader.ReadToEnd(); sReader.Close(); //关闭读文件流 if (isEncryption) { return Decrypt(dataString); //是否解密处理 } else { return dataString; } } /// 加密方法 /// 描述: 加密和解密采用相同的key,具体值自己填,但是必须为32位 public string Encrypt(string toE) { byte[] keyArray = UTF8Encoding.UTF8.GetBytes("12348578902223367877723456789012"); RijndaelManaged rDel = new RijndaelManaged(); rDel.Key = keyArray; rDel.Mode = CipherMode.ECB; rDel.Padding = PaddingMode.PKCS7; ICryptoTransform cTransform = rDel.CreateEncryptor(); byte[] toEncryptArray = UTF8Encoding.UTF8.GetBytes(toE); byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length); return Convert.ToBase64String(resultArray, 0, resultArray.Length); } /// 解密方法 /// 描述: 加密和解密采用相同的key,具体值自己填,但是必须为32位 public string Decrypt(string toD) { byte[] keyArray = UTF8Encoding.UTF8.GetBytes("12348578902223367877723456789012"); RijndaelManaged rDel = new RijndaelManaged(); rDel.Key = keyArray; rDel.Mode = CipherMode.ECB; rDel.Padding = PaddingMode.PKCS7; ICryptoTransform cTransform = rDel.CreateDecryptor(); byte[] toEncryptArray = Convert.FromBase64String(toD); byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length); return UTF8Encoding.UTF8.GetString(resultArray); }
public class UserData { public string userName; //用户名 public int onlyId; //用户唯一id public UserData() { } }
函数的用法
//xml数据存储和读取 public void XmlLocalStorage() { string _fileName = Application.persistentDataPath + "/UnityUserData"; UserData user = new UserData(); user.userName = "乐逍遥"; user.onlyId = 1; //存储数据 string s = SerializeObject(user, typeof(UserData)); //创建XML文件且写入数据 CreateTextFile(_fileName, s,false); //读取数据 try { string strTemp = LoadTextFile(_fileName,false); //反序列化对象 UserData userD = DeserializeObject(strTemp, typeof(UserData)) as UserData; } catch { Debug.Log("系统读取XML出现错误,请检查"); } }