using System; using System.Collections.Generic; using System.IO; using System.Text; namespace UnityFS { public static class BinaryReaderExtensions { public static void AlignStream(this BinaryReader reader, int alignment) { var pos = reader.BaseStream.Position; var mod = pos % alignment; if (mod != 0) { reader.BaseStream.Position += alignment - mod; } } public static string ReadAlignedString(this BinaryReader reader) { var length = reader.ReadInt32(); if (length > 0 && length <= reader.BaseStream.Length - reader.BaseStream.Position) { var stringData = reader.ReadBytes(length); var result = Encoding.UTF8.GetString(stringData); reader.AlignStream(4); return result; } return ""; } public static string ReadStringToNull(this BinaryReader reader, int maxLength = 32767) { var bytes = new List(); int count = 0; while (reader.BaseStream.Position != reader.BaseStream.Length && count < maxLength) { var b = reader.ReadByte(); if (b == 0) { break; } bytes.Add(b); count++; } return Encoding.UTF8.GetString(bytes.ToArray()); } } }