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