PlayerPrefs没有提供存储bytes[]和其他自定义结构的接口,我们可以利用现有的SetString接口,将bytes[]转化为string存储,从而实现扩展
1.bytes[]和string之间的互相转换
`System.Convert.ToBase64String(bytes)`
`System.Convert.FromBase64String(string);`
2.自定义数据存储
利用上述bytes[]的扩展,我们可以将自定义对象序列化成bytes[],即可实现扩展,类似于实现网络协议
1.定义一个接口用来约定自定义对象序列化和反序列化
`public interface IPrefSerializer
{
void Write(BinaryWriter writer);
void Read(BinaryReader reader);
}`
2.实现自定义对象的扩展
`public static void SetObject(string key, IPrefSerializer value)
{
using (MemoryStream ms = new MemoryStream())
{
value.Write(new BinaryWriter(ms));
byte[] bytes = ms.ToArray();
SetBytes(key, bytes);
}
}`
3.实现自定义对象列表的扩展
序列化List时,需要先序列化List的长度
`public static void SetObjectList<T>(string key, List<T> value) where T : IPrefSerializer
{
using (MemoryStream ms = new MemoryStream())
{
BinaryWriter writer = new BinaryWriter(ms);
writer.Write(value.Count);
for (int i = 0; i < value.Count; i++)
{
IPrefSerializer data = value[i];
data.Write(writer);
}
byte[] rlt = ms.ToArray();
SetBytes(key, rlt);
}
}`