コンピューターでは、すべてのデータはバイナリ形式で保存されますが、場合によっては、Unity コードの一部のデータをバイナリ形式でハードディスクに保存する必要があり、バイナリ データの永続化が必要になります。
C# における各データ型とバイトコード間の変換を最初に理解する必要があります。まず、各データ型が占めるバイト サイズを示すシートを見てみましょう。
C# はバイト変換用のパブリック クラスを提供します。これには、データを相互に変換するために使用される名前空間 BitConverter を参照する必要があります。
以下は int 型を byte に、byte を int 型に変換します。
//1.各类型转字节
byte[] bytes = BitConverter.GetBytes(98);
//第一个参数表示需要转换的字节数组
//第二个参数表示从字节数组的第几个索引开始转换
int i = BitConverter.ToInt32(bytes,0);
print(i);
ただし、このメソッドは文字列とバイト配列を変換できないため、C# には文字列変換用のクラスも提供されています。
エンコーディング。名前空間 System.Text を参照する必要があります。
以下は文字列バイトの前後の変換です。
//1.将字符串已指定编码格式转字节
byte[] bytes2 = Encoding.UTF8.GetBytes("墨晴轩");
//2.字节数组以指定编码格式转字符串
string s = Encoding.UTF8.GetString(bytes2);
文字の変換方法を理解した後は、C# がフォルダー File をどのように操作するかについても理解する必要があります。これには、System.IO 名前空間を参照する必要があります。
一般的に使用されるコード操作ファイル API は次のとおりです。
1. ファイルが存在するかどうかを確認します
2. ファイルを作成する
3. ファイルに書き込む
4. ファイルを読み取ります
//1.判断文件是否存在
if (File.Exists(Application.dataPath + "/UnityTeach.mqx"))
{
print("文件存在");
}
else
{
print("文件不存在");
}
//2.创建文件
//FileStream fs = File.Create(Application.dataPath + "/UnityTeach.mqx");
//3.写入文件
//#将指定字节数组 写入到指定路径的文件中
byte[] bytes = BitConverter.GetBytes(999);
File.WriteAllBytes(Application.dataPath + "/UnityTeach.mqx", bytes);
//#将指定的string数组内容 一行行写入到指定路径中
string[] strs = new string[] {"123","墨晴轩","asdfafasdf"};
File.WriteAllLines(Application.dataPath + "/UnityTeach2.mqx", strs);
//#将指定字符串写入指定路径
File.WriteAllText(Application.dataPath + "/UnityTeach3.mqx", "墨晴轩\n嘉然嘉心糖");
//4.读取文件
//#读取字节数据
bytes = File.ReadAllBytes(Application.dataPath + "/UnityTeach.mqx");
print(BitConverter.ToInt32(bytes, 0));
上記の File ファイルクラスはファイルの読み書き、作成、判定が可能ですが、File が提供できるのはファイル全体に対するほぼすべての操作ですが、一部のデータの読み書きも必要になります。が必要です。C# は、この要件を達成し、データの部分的な読み取りと書き込みを行うための FileStream データ ストリーム クラス (System.IO 名前空間が必要) を提供します。FileStreamの使い方を見ていきましょう。
ファイルストリーム:
1. 指定されたファイルを開くか作成します (どちらも FileStream タイプを返します)。
メソッドは3つあり、コードは次のとおりです
//方法一:new FileStream
//参数一:路径
//参数二:打开模式
//CreatNew:创建新文件 如果文件存在 则报错
//Creat:创建文件,如果文件存在则覆盖
//Open:打开文件,如果文件不存在 报错
//OpenOrCreat:打开或者创建文件根据实际情况操作
//Append:若存在文件,则打开并查找文件尾,或者创建一个新文件
//Truncate:打开并清空文件内容
//参数三:访问模式
//参数四:共享权限
FileStream fs = new FileStream(Application.dataPath + "/Lesson3.mqx", FileMode.Create, FileAccess.ReadWrite);
//方法二:File.Creat
//参数一:路径
//参数二:缓存大小
//参数三:描述如何创建或者覆盖该文件
FileStream fs2 = File.Create(Application.dataPath + "/Lesson3.mqx");
//方法三:File.Open
//参数一:路径
//参数二:打开模式
FileStream fs3 = File.Open(Application.dataPath + "/Lesson3.mqx", FileMode.Open);
2. FileStream の重要なメソッドとプロパティ
FileStream fs = File.Open(Application.dataPath + "/Lesson3.mqx", FileMode.OpenOrCreate);
文本字节长度
print(fs.Length);
//是否可读
if (fs.CanRead)
{
}
if (fs.CanWrite)
{
}
//将字节写入文件 当写入后 一定执行一次
fs.Flush();
//关闭流 当文件读写完毕后 一定执行
fs.Close();
//缓存资源销毁回收
fs.Dispose();
3. バイトの書き込み
FileStream fs = new FileStream(Application.persistentDataPath + "/Lesson3.mqx", FileMode.OpenOrCreate,FileAccess.Write);
byte[] bytes = BitConverter.GetBytes(1024);
byte[] data= new byte[1024];
//方法:Write
//参数一:写入的字节数组
//参数二:数组中的开始索引
//参数三:写入多少个字节
fs.Write(bytes, 0, bytes.Length);
fs.Write(data, 100, 2);
//写入字符串时
bytes = Encoding.UTF8.GetBytes("关注嘉然,顿顿解馋");
//先写长度
int length=bytes.Length;
fs.Write(BitConverter.GetBytes(length),0,4);
//再写入字符串具体内容
fs.Write(bytes, 0, bytes.Length);
//避免数据丢失 一定写入后要执行的方法
fs.Flush();
//销毁缓存 释放资源
fs.Dispose();
4. バイトの読み取り
FileStream fs2 = File.Open(Application.persistentDataPath + "/Lesson3.mqx", FileMode.Open, FileAccess.Read);
#region 挨个读取字节数组
//读取第一个整型
byte[] bytes2 = new byte[4];
//参数一:用于存储读取的字节数组的容器
//参数二:容器中开始的位置
//参数三:读取多少个字节装入容器
//返回值:当前流索引前进了几个位置
int index = fs2.Read(bytes2, 0, 4);
int i = BitConverter.ToInt32(bytes2,0);
print("取出来的第一个整数" + i);//1024
print("索引向前移动了" + index + "个位置");
//读取第二个字符串
//读取字符串字节数组长度
index = fs2.Read(bytes2, 0, 4);
print("索引向前移动了" + index + "个位置");
length = BitConverter.ToInt32(bytes2, 4);
//要根据存储的字符串字节数组的长度 来声明一个新的数组
//bytes2 = new byte[length];
index = fs2.Read(bytes2, 0, length);
print("索引向前移动了" + index + "个位置");
//得到最终的字符串 打印
print(Encoding.UTF8.GetString(bytes2));
fs.Dispose();
#endregion
#region 一次性读取再挨个读取
Debug.Log("*********************************");
FileStream fs3 = File.Open(Application.persistentDataPath + "/Lesson3.mqx", FileMode.Open, FileAccess.Read);
//一开始就声明一个 和文件字节数组长度一样的容器
byte[] bytes3 = new byte[fs.Length];
fs3.Read(bytes3, 0, (int)fs3.Length);
fs3.Dispose();
//读取整数
print(BitConverter.ToInt32(bytes3, 0));
//得出去字符串字节数组的长度
int length2 = BitConverter.ToInt32(bytes3, 4);
//得到字符串
Encoding.UTF8.GetString(bytes3, 8, length2);
以上がバイトコード変換、ファイル操作、ファイルストリームの基礎です