using System; using System.Collections.Generic; using System.IO; using System.Text; using UnityEngine; public class ByteReader { public ByteReader(byte[] bytes) { this.mBuffer = bytes; } public ByteReader(TextAsset asset) { this.mBuffer = asset.bytes; } public static ByteReader Open(string path) { FileStream fileStream = File.OpenRead(path); if (fileStream != null) { fileStream.Seek(0L, SeekOrigin.End); byte[] array = new byte[fileStream.Position]; fileStream.Seek(0L, SeekOrigin.Begin); fileStream.Read(array, 0, array.Length); fileStream.Close(); return new ByteReader(array); } return null; } public bool canRead { get { return this.mBuffer != null && this.mOffset < this.mBuffer.Length; } } private static string ReadLine(byte[] buffer, int start, int count) { return Encoding.UTF8.GetString(buffer, start, count); } public string ReadLine() { return this.ReadLine(true); } public string ReadLine(bool skipEmptyLines) { int num = this.mBuffer.Length; if (skipEmptyLines) { while (this.mOffset < num && this.mBuffer[this.mOffset] < 32) { this.mOffset++; } } int i = this.mOffset; if (i < num) { while (i < num) { int num2 = (int)this.mBuffer[i++]; if (num2 == 10 || num2 == 13) { IL_87: string result = ByteReader.ReadLine(this.mBuffer, this.mOffset, i - this.mOffset - 1); this.mOffset = i; return result; } } i++; goto IL_87; } this.mOffset = num; return null; } public Dictionary ReadDictionary() { Dictionary dictionary = new Dictionary(); char[] separator = new char[] { '=' }; while (this.canRead) { string text = this.ReadLine(); if (text == null) { break; } if (!text.StartsWith("//")) { string[] array = text.Split(separator, 2, StringSplitOptions.RemoveEmptyEntries); if (array.Length == 2) { string key = array[0].Trim(); string value = array[1].Trim().Replace("\\n", "\n"); dictionary[key] = value; } } } return dictionary; } public BetterList ReadCSV() { ByteReader.mTemp.Clear(); string text = string.Empty; bool flag = false; int num = 0; while (this.canRead) { if (flag) { string text2 = this.ReadLine(false); if (text2 == null) { return null; } text2 = text2.Replace("\\n", "\n"); text = text + "\n" + text2; } else { text = this.ReadLine(true); if (text == null) { return null; } text = text.Replace("\\n", "\n"); num = 0; } int i = num; int length = text.Length; while (i < length) { char c = text[i]; if (c == ',') { if (!flag) { ByteReader.mTemp.Add(text.Substring(num, i - num)); num = i + 1; } } else if (c == '"') { if (flag) { if (i + 1 >= length) { ByteReader.mTemp.Add(text.Substring(num, i - num).Replace("\"\"", "\"")); return ByteReader.mTemp; } if (text[i + 1] != '"') { ByteReader.mTemp.Add(text.Substring(num, i - num).Replace("\"\"", "\"")); flag = false; if (text[i + 1] == ',') { i++; num = i + 1; } } else { i++; } } else { num = i + 1; flag = true; } } i++; } if (num < text.Length) { if (flag) { continue; } ByteReader.mTemp.Add(text.Substring(num, text.Length - num)); } return ByteReader.mTemp; } return null; } private byte[] mBuffer; private int mOffset; private static BetterList mTemp = new BetterList(); }