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);
}
}`
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 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 让容器管理更轻松!