//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("数据写入成功");
}
}
|