二進位制檔案操作-儲存與讀取
阿新 • • 發佈:2019-01-24
目標:實現資料儲存為二進位制檔案,然後通過二進位制檔案解析資料。
目標分為三個階段:1、將資料結構轉化為二進位制(至於資料是怎樣讀取進來的這個就不說了,因為方式比較多,但是讀取進來一定都會以特定的資料結構形式來儲存)。2、載入二進位制文字。3、載入為對應的資料結構。
階段一:將資料結構轉化為二進位制有兩種方式:1:利用C#的BinaryWrite,2:使用函式把資料轉化成byte陣列,然後在寫入。
方法1:
說明:這種方法程式碼也沒幾行,方式也很好理解,我把過程封裝成函式,傳入路徑和檔名即可(溫馨提示:unity裡面二進位制存在StreamingAssets資料夾裡面,若不懂可百度,有很多資源)。public bool SaveBinaryFile(string _path, string _name, TextAsset t){ string content = t.text; //二進位制檔案流資訊 BinaryWriter bw = new BinaryWriter(new FileStream (_path + _name, FileMode.Create));; FileStream fs = new FileStream (_path + _name, FileMode.Create); try { bw = new BinaryWriter(new FileStream (_path + _name, FileMode.Create)); }catch(IOException e){ Debug.Log (e.Message); } try { bw.Write(content); }catch(IOException e){ Debug.Log (e.Message); } debugInfo += "檔案建立成功!\n"; return true; }
為了讓大家更好的理解我把路徑貼出來:
private string name = "1.bytes";
public static readonly string path = Application.streamingAssetsPath + "/";
方法2:
說明:這種方法簡單方便,利用System.Text下的BitConverter將其他型別的轉化為二進位制型別[特殊:不包括String型別的轉化,string轉化用Encoding.UTF8.GetBytes即可]。string path = Application.streamingAssetsPath + "/"; string name = "2.bytes"; int a = 15; byte[] b = BitConverter.GetBytes (a); File.WriteAllBytes (path + name, b);
這樣階段一就完成了。
階段二:
載入二進位制文字採用www載入,目前我知道唯一簡單方便的載入方式,如果有更好的載入方式還請指教。
用www載入需要用到協程,如果對協程不是很懂的同學請自行查詢(記得以前寫過一篇但是沒找到,有時間也會整理一篇)。下面是載入程式碼。
IEnumerator wwwLoad(string _path, Action<byte[]> action){ #if UNITY_EDITOR || UNITY_IOS _path = "file://" + _path; #endif WWW www = new WWW (_path); yield return www; action (www.bytes); }
注意點:下載的路徑有所變化,詳細瞭解可以去看看Unity的平臺路徑,因為與本文無關,不多說了。這裡我用了回撥,只是習慣,當然也可以等WWW下載完成後自行呼叫其他函式。
階段三:使用BinaryReader類解析二進位制檔案
public void readByte(byte[] b){
using (BinaryReader br = new BinaryReader(new MemoryStream(b))){
int f = br.ReadInt32 ();
Debug.Log (f);
}
}
只需要使用使BinaryReader類中的函式來讀取對一個型別的資料就可以了。
至此,任務完成。