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

PlayerPrefs没有提供存储bytes[]和其他自定义结构的接口,我们可以利用现有的SetString接口,将bytes[]转化为string存储,从而实现扩展

1.bytes[]和string之间的互相转换#

Copy
`System.Convert.ToBase64String(bytes)` `System.Convert.FromBase64String(string);`

2.自定义数据存储#

利用上述bytes[]的扩展,我们可以将自定义对象序列化成bytes[],即可实现扩展,类似于实现网络协议

1.定义一个接口用来约定自定义对象序列化和反序列化

Copy
`public interface IPrefSerializer { void Write(BinaryWriter writer); void Read(BinaryReader reader); }`

2.实现自定义对象的扩展

Copy
`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的长度

Copy
`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 @   jeoyao  阅读(507)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示
目录