【小松教你手游开发】【系统模块开发】unity 数据储存到本地为二进制文件(聊天记录本地储存)

本文介绍了Unity游戏开发中数据本地存储的三种方法:Stream::Write和Stream::WriteLine、Serializable标记的BinaryFormatter或XML、以及自定义数据解析的BinaryWriter。作者分享了自己在实现聊天记录本地存储时采用自定义数据解析的方式,通过队列和回调处理读写操作,以适应各种场景并提供可扩展性。示例代码展示了具体的实现过程。
摘要由CSDN通过智能技术生成

unity游戏开发中有很多需要把数据储存到本地,官方有好几个方式可以使用,下面简单介绍一下。

一、Stream::Write,Stream::WriteLine

这个方法是打开数据流就开始写字符串,可以指定长度写,也可以一行一行的写。具体参考http://blog.csdn.net/dingxiaowei2013/article/details/19084859和雨松大神的http://www.xuanyusong.com/archives/1069

这种方法最简单,一行一行的写,一行一行的读,都已String的形式写下来,可以中午可以英文。

缺点是不是二进制文件,不好做数据截断获取,比如你想把一个数据包保存下来,中间的各种数据需要你在字符串中写标记符进行切分。


二、[System.Serializable]标记,BinaryFormatter或xml写入

把自己的数据类型标记成可序列化数据二进制文件,用BinaryFormatter来进行写入读取操。具体参考http://bbs.9ria.com/thread-417373-1-1.html

这种方法也比较简单,数据按数据结构存放,数据不用做解析直接按数据结构使用

缺点是只能存放一个数据,每次写入读取都是一个数据,并不适合大多数情况(有一种用哈希表的形式进行拓展,不好用不说据说在ios上还有问题)


三、自己做数据解析,BinaryWriter写入

可以定义一个数据结构,这个结构里面的确定这个数据结构里的每个变量的数据类型,如果有字符串还需要获取字符串长度放在字符串前面

也就是一般网络传输的方式。

我现在项目用的就是这个方法,具体我会在后面贴上代码。

这种方法比较麻烦,需要自己定义数据结构和确定好每个数据结构的变量数据类型,字符串需要计算长度,但是这种方法可以适合任何场景。并且数据不需要换行只管一直写入,

而且这种方面解决上面两个方式的缺点

这个方法还有一个缺点是如果数据结构改了需要改读取和写入数据的方法。


因为想着写入本地序列化不只是我一个需求,需要可拓展性。

跟进上面这些我对类结构进行了一些安排


下面是代码和解释

我写的是一个保存聊天记录的功能

数据结构基类(暂时里面为空。。。虽然没有东西但是总觉得以后需要所以建了个基类)

using UnityEngine;
using System.Collections;

public class SerializeDataBase
{

}


聊天数据的数据结构

using UnityEngine;
using System.Collections;

public class ChatSerializeData : SerializeDataBase
{
    public long timeStamp;
    public int senderID;
    public int receiverID;
    //public short contentLength //这里有16位代表下面的字符串长度
    publ
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值