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