unity学习心得之二进制、json的存储读取数据

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/asdfghj253/article/details/84447919

存储数据方式主要有二进制、json、xml三种

原理都是 储存->数据序列化成字节流->存入文件(txt,json,xml) 

               读取->字节流反序列化成数据->赋值给项目中专用来储存这些的对象

1.二进制

用二进制首先需要2个包,unity已经自己有,不用下,直接脚本写就行了

using System.IO;   //文件流filestream
using System.Runtime.Serialization.Formatters.Binary;//使用二进制需引用的

存储

1.创建一个含有当前游戏信息的一个对象

例:

        //创建save对象,并得到当前游戏信息
        TheSave save = CreateSaveObject();

2.创建一个二进制格式化程序

例:

        //创建一个二进制格式化程序-bf
        BinaryFormatter bf = new BinaryFormatter();

3.创建一个文件流

例:

        //创建一个文件流
        FileStream fileStream = File.Create(Application.dataPath + "/StreamingFile" + "/byBin.txt");

4.用二进制格式化程序来序列化save对象

        //用二进制格式化程序来序列化save对象-参数(文件流,序列化对象)
        bf.Serialize(fileStream, save);

5.关闭

        //关闭流
        fileStream.Close();

读取

1.//创建一个二进制格式化程序

BinaryFormatter bf = new BinaryFormatter();

2.打开一个文件流

            //打开一个文件流
            FileStream fileStream = File.Open(Application.dataPath + "/StreamingFile" + "/byBin.txt", FileMode.Open);

3. //用二进制格式化程序的反序列方法,来将文件流转换为save对象

//用二进制格式化程序的反序列方法,来将文件流转换为save对象
            TheSave save = (TheSave)bf.Deserialize(fileStream);

4.关闭文件流

            //关闭文件流
            fileStream.Close();

5.读取完得到储存游戏信息的对象save后,编写一个函数来让save里的数据代替现在的数据

SetGame(save);

总体

    //二进制方法
    private void SaveByBin()
    {
        //序列化过程-将save对象转换为字节流

        //创建save对象,并得到当前游戏信息
        TheSave save = CreateSaveObject();
        //创建一个二进制格式化程序-bf
        BinaryFormatter bf = new BinaryFormatter();
        //创建一个文件流
        FileStream fileStream = File.Create(Application.dataPath + "/StreamingFile" + "/byBin.txt");
        //用二进制格式化程序来序列化save对象-参数(文件流,序列化对象)
        bf.Serialize(fileStream, save);
        //关闭流
        fileStream.Close();
    }

    private void LoadByBin()
    {
        if (File.Exists(Application.dataPath + "/StreamingFile" + "/byBin.txt"))
        {
            //反序列化过程
            //创建一个二进制格式化程序
            BinaryFormatter bf = new BinaryFormatter();
            //打开一个文件流
            FileStream fileStream = File.Open(Application.dataPath + "/StreamingFile" + "/byBin.txt", FileMode.Open);
            //用二进制格式化程序的反序列方法,来将文件流转换为save对象
            TheSave save = (TheSave)bf.Deserialize(fileStream);
            //关闭文件流
            fileStream.Close();

            SetGame(save);
        }
    }

2.json

json用到了外部的包,具体网上找,名字就是LitJson,但用这个需注意编码问题,有中文(生成json)不能直接存

using LitJson;   //json

存储

1.还是一个有游戏信息的对象

TheSave save = CreateSaveObject();

2.定义一个string路径

string filePath = Application.dataPath + "/StreamingFile" + "/byJson.json";  //.txt和.json都可以

3.利用litjson自带的函数将Save对象转换为json格式的字符串

        //利用litjson自带的函数将Save对象转换为json格式的字符串
        string saveJsonStr = JsonMapper.ToJson(save);

4.创建一个json的StreamWritter

        //创建一个StreamWritter
        StreamWriter sw = new StreamWriter(filePath);//创建文件

5.将json字符串写入文件

sw.Write(saveJsonStr);//写入文件

6.关闭StreamWritter

sw.Close();

读取

1.创建路径字符串

string filePath = Application.dataPath + "/StreamingFile" + "/byJson.json"; 

2.创建一个StreamReader

//创建一个StreamReader
            StringReader sr = new StringReader(filePath);

3. 将读取到的流赋值给jsonstr

            //将读取到的流赋值给jsonstr
            string saveJsonStr = sr.ReadToEnd();

4.将字符串jsonstr转换为save对象

            //将字符串jsonstr转换为save对象
            TheSave save = JsonMapper.ToObject<TheSave>(saveJsonStr);

5.关闭

            //关闭
            sr.Close();

总体

//Json方法
    private void SaveByJson()
    {
        TheSave save = CreateSaveObject();
        string filePath = Application.dataPath + "/StreamingFile" + "/byJson.json";  //.txt和.json都可以
        //利用litjson自带的函数将Save对象转换为json格式的字符串
        string saveJsonStr = JsonMapper.ToJson(save);
        //将json字符串写入文件
        //创建一个StreamWritter
        StreamWriter sw = new StreamWriter(filePath);//创建文件
        sw.Write(saveJsonStr);//写入文件
        //关闭StreamWritter
        sw.Close();
    }
    private void LoadByJson()
    {
        string filePath = Application.dataPath + "/StreamingFile" + "/byJson.json"; 
        if (File.Exists(filePath))
        {
            //创建一个StreamReader
            StringReader sr = new StringReader(filePath);
            //将读取到的流赋值给jsonstr
            string saveJsonStr = sr.ReadToEnd();
            Debug.Log(saveJsonStr);
            //将字符串jsonstr转换为save对象
            TheSave save = JsonMapper.ToObject<TheSave>(saveJsonStr);
            //关闭
            sr.Close();
            SetGame(save);
        }
    }

总结来说:

二进制:

储存:得到对象->创二进制格式化程序->创建一个文件流->用二进制格式化程序来序列化对象->关闭

读取:创二进制格式化程序->打开一个文件流->二进制格式化程序的反序列方法将文件流转换对象->关闭->用对象更新游戏数据

Json:

:储存:得到对象->创字符串路径->自带的函数JsonMapper.tojson(对象)-转换为json格式->创建一个StreamWritter->写入文件->关闭

读取:创字符串路径->创建一个StreamReader->读取sr.ReadToEnd();赋值给字符串->将字符串jsonstr转换为对象JsonMapper.ToObject<对象>(字符串)   ->关闭->用对象更新游戏数据

猜你喜欢

转载自blog.csdn.net/asdfghj253/article/details/84447919