返回首页DA系统C#IDE文件同步服务屏保 今天是: 2026-05-05    "立夏"  夏季的第一个节气,表示盛夏时节的正式开始

搜索
热搜: linux 技术
Hi~登录注册
查看: 2263|回复: 0

[原创] 【原创】数据流IO的基础讲解

[复制链接]
发表于 2023-3-31 08:55:28 | 显示全部楼层 |阅读模式
//StreamIO_Script.cs

using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Text;
using UnityEngine;

public class StreamIO_Script : MonoBehaviour
{
    /*数据流IO(偏向于底层的操作)
     *Stream (这个类是抽象类,要使用的话得使用派生类)
     *  流涉及三个基本操作:
     *      1.可以读取流(Read)。读取是从流到数据结构(如字节数组)的数据传输。
     *      2.可以写入流(Write)。写入是从数据结构到流的数据传输。
     *      3.流可以支持查找(Seek、Position)。查找是对流内的当前位置进行的查询和修改。
     *        查找功能取决于流具有的后备存储区类型。例如网络流没有当前位置的统一概念,
     *        因此一般不支持查找。
     *        
     *  注意:流使用的整套流程:创建流派生类对象--使用流读取/写入--关闭流







     *        
     *FileStream  FileMode
     *
     *StreamReader:流内容读取器
     *  用于对数据流或本地文件简单的以字符的方式进行读取。
     *  常用方法:ReadLine  Read  ReadToEnd
     *  
     *StreamWriter:将内容写入流,写入器
     *
     *
     */

    private string StreamFile = Path.Combine(Application.streamingAssetsPath, "Stream.txt");

    private string StreamReadText;

    private void OnGUI()
    {
        if (GUILayout.Button("创建测试文件"))
        {
            if (!File.Exists(StreamFile))
            {
                File.Create(StreamFile);
            }

            StartCoroutine(waitFF());

            //需要等待一秒才能保证数据写入新创建的文本中,刚创建的文本不能同时写入数据!否则会报错 IOException: Sharing violation on path
            //File.WriteAllText(StreamFile, "uheuh3hu4h84fhuryufuhf48uodkdkf");
        }
        if (GUILayout.Button("造测试数据"))
        {
            File.WriteAllText(StreamFile, "uheuh3hu4未h84fhuryufuhf48uodkdkf啊哈哈");
        }
        if (GUILayout.Button("使用数据流读取测试文件"))
        {
            StreamReadText = StreamReadFF(StreamFile);

            print(StreamReadText);
        }
    }

    private string StreamReadFF(string path)
    {
        //Stream 是抽象类,如果要使用必须使用FileStream派生类实例化创建 streamReadObj 对象
        Stream streamReadObj = new FileStream(path, FileMode.OpenOrCreate);

        byte[] textByte = new byte[streamReadObj.Length];

        //使用FileStream.Read 方法读取文件(字节数组,从哪开始读,读取的长度(int类型))
        streamReadObj.Read(textByte,0, (int)streamReadObj.Length);

        //使用FileStream.Write 方法写入数据(字节数组,从哪开始写,写到哪里)
        streamReadObj.Write(textByte, 0, (int)streamReadObj.Length);

        //写入完成后最好使用Flush()刷新下!
        streamReadObj.Flush();

        //特别注意:流(用流的派生类定义的对象等等)使用完毕后必须关闭close,否则资源得不到释放,下次再使用流时,将会出现异常!!
        streamReadObj.Close();


        //流读取的是字节数组,需要使用Encoding类解码成字符串格式,需要引用System.Text 类
        //注意,解码的格式和实际需求有关,比如这次测试文件使用的是utf-8格式,所以就使用utf-8格式解码!
        return Encoding.UTF8.GetString(textByte);
    }


    //需要等待一秒才能保证数据写入新创建的文本中
    private IEnumerator waitFF()
    {
        yield return new WaitForSeconds(1);

        File.WriteAllText(StreamFile, "uheuh3hu4未h84fhuryufuhf48uodkdkf啊哈哈");
        print("数据写入成功");
    }

}


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册成为修仙之旅的少年~

x
游客
回复
*滑块验证:

DA论坛飞机票来了~
快速回复 返回顶部 返回列表