Unity IO文明流,序列化与反序列化的简单运用与理解

本文介绍了序列化和反序列化的概念,包括将对象转换为字节序列和从字节序列恢复对象。接着,详细阐述了Unity中如何进行IO文件操作,如创建、访问、移动文件,以及写入、读取文本内容和使用文件流进行读写。示例代码展示了File.WriteAllText、File.WriteAllBytes等函数的用法,以及如何利用文件流进行序列化和反序列化操作。
摘要由CSDN通过智能技术生成

这里我们先理解一下什么是序列化和反序列化。简单的来说序列化就是把其他类型转化为字节序列类型(byte[]),这种类型的转换就是序列化。而反序列化就是把字节序列类型转化为对象类型。这里对象类型可以是多样的,一般都是值类型的转换。甚至都可以是图片,以及其他对象进行序列化,只不过会出现乱码的情况。

IO文件的创建:

1、第一种方式是通过外部去创建

2、通过代码的方式创建

string s = Application.dataPath+"文件路径";

对文件信息的访问:

 FileInfo f = new FileInfo(Application.dataPath + "/flod/b.text");

print(f.Name);//文件名称

if (!f.Exists)//不存在就创建b
       {
           f.Create();
       }

f.MoveTo(Application.dataPath + "/flod/c.text");//把b文件重命名为c 

IO文件的操作:

File.WriteAllText()写入文件

string s1 = "Hello World";
File.WriteAllText(Application.dataPath + "/flod/b.text", s1);//把s1放入文件b中

 string[] n1 = { "男", "女" };
File.WriteAllLines(Application.dataPath + "/flod/b.text", n1);//以多行的形式把s1内容覆盖为n1的内容

  string s3 = "变成";
  byte[] s4 = Encoding.UTF8.GetBytes(s3);//序列化内容
  File.WriteAllBytes(Application.dataPath + "/flod/b.text", s4);//以字节的形式存入文本

File.AppendAllText(Application.dataPath + "/flod/b.text",“\n123”)//不覆盖之前的把内容去添加新内容在之前的文件上 

读取文本信息:

 File.ReadAllText();读取所有行的信息

//读取所有行数据
 string s = Application.dataPath + "/flod/b.text";
 string s1 = File.ReadAllText(s);
 print(s1);

 File.ReadAllLines();分行读取信息,一行一行的读取信息,这里需配合换行符进行使用

//一行一行的读取所有的信息
string s = Application.dataPath + "/flod/b.text";
string[] s2 = File.ReadAllLines(s);
print(s2)

 File.ReadAllBytes()反序列化读取全部行信息。

//反序列化读取文本所有信息

byte[] s3 =File.ReadAllBytes(Application.dataPath + "/flod/bg.jpg");
string s4 =Encoding.UTF8.GetString(s3);
print(s4);

 文件流形式读文件与写文件:

方法1:

文件流读取文件:

 void FileStreamRead()//文件流形式读的形式,反序列化
    {
        //文件路径
        string n = Application.dataPath + "/flod/b.text";
        if (File.Exists(n))//判断是否存在
        {
            //创建文件流构造函数,FileMode.Open打开文件流,读取内容
                //new FileStream(文件路径,文件的操作形式,文件的读取)
            using (FileStream fs = new FileStream(n, FileMode.Open, FileAccess.ReadWrite))
            {
                //反序列化
                //获取文件的长度,并进行序列化管理
                byte[] b = new byte[fs.Length];

                //获取的是包含文件名称,以及文件内容的的所有字节长度
                int lenth = fs.Read(b, 0, b.Length);
                //反序列化操作,把获取的序列化文件b,进行反序列化操作,进行读取里面的文本内容
                string s =Encoding.UTF8.GetString(b, 0, lenth);
                print(s);
                fs.Close();//关闭文件
            }
        }
    }

文件流写入文件:

  void FileStreamWrite()//文件流形式写的形式,序列化操作
    {
        //查找文件
        string n = Application.dataPath + "/flod/b.text";
        if (File.Exists(n))//判断文件是否存在
        {
            //创建文件流构造函数,FileMode.Create写入文件,读取内容
            //new FileStream(文件路径,文件的操作形式,文件的读取)
            using (FileStream fs=new FileStream(n, FileMode.Create, FileAccess.ReadWrite))
            {
                //需要写入文件的内容
                string s = "Is my God ";
                //对写入文件的内容进行序列化操作
                byte[] s1 =Encoding.UTF8.GetBytes(s);
                //写入文件
                fs.Write(s1, 0, s1.Length);

                fs.Flush();//刷新缓存区
                fs.Close();//关闭文件
            }
        }
    }

方法2:


string s = Application.dataPath + "/flod/b.text";

        if (File.Exists(s))
        {
            //读的操作,创建一个读的构造函数

            using (StreamReader reader = new StreamReader(s, Encoding.UTF8))
            {
                while (true)
                {
                    //读取一行内容,在死循环里读取文件里所有的文件
                    string n = reader.ReadLine();
                    if (n == null)//当读取的内容为空时跳出循环
                    {
                        break;

                    }
                }

                reader.Close();
            }

              //写入的操作,创建一个写入的构造函数
            using (StreamWriter writer=new StreamWriter(Application.dataPath + "/flod/b.text"))
            {
                   string s = "Hello World";
                //创建一个WriteLine()写入的方法,把内容写入文件内  
                 writer.WriteLine(s);              
                writer.WriteLine(new char[]{'2','3'});
                writer.Close();
            }

        }
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值