52 lines
1.5 KiB
C#
52 lines
1.5 KiB
C#
|
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());
|
|||
|
}
|
|||
|
}
|
|||
|
}
|