| 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<byte>(); | 
|             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()); | 
|         } | 
|     } | 
| } |