Unity开发笔记-PlayerPrefs存储bytes[]和自定义对象

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);
    }
}`
posted @ 2020-07-29 10:58  jeoyao  阅读(475)  评论(0编辑  收藏  举报