41 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			41 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using System;
 | |
| using System.Collections.Generic;
 | |
| using System.IO;
 | |
| using System.Linq;
 | |
| using System.Text;
 | |
| 
 | |
| namespace AnotherReplayReader.ReplayFile
 | |
| {
 | |
|     internal static class ReplayExtensions
 | |
|     {
 | |
|         public static string ReadUTF16String(this BinaryReader reader)
 | |
|         {
 | |
|             var currentBytes = new List<byte>();
 | |
|             var lastTwoBytes = Array.Empty<byte>();
 | |
|             while (true)
 | |
|             {
 | |
|                 lastTwoBytes = reader.ReadBytes(2);
 | |
|                 if (lastTwoBytes.Length != 2)
 | |
|                 {
 | |
|                     throw new InvalidDataException();
 | |
|                 }
 | |
|                 if (lastTwoBytes.All(x => x == 0))
 | |
|                 {
 | |
|                     break;
 | |
|                 }
 | |
|                 currentBytes.AddRange(lastTwoBytes);
 | |
|             }
 | |
| 
 | |
|             return Encoding.Unicode.GetString(currentBytes.ToArray());
 | |
|         }
 | |
| 
 | |
|         public static void Write(this BinaryWriter writer, ReplayChunk chunk) => chunk.WriteTo(writer);
 | |
| 
 | |
|         public static void Write(this BinaryWriter writer, ReplayFooter footer) => footer.WriteTo(writer);
 | |
| 
 | |
|         public static void Write(this BinaryWriter writer, Replay replay) => replay.WriteTo(writer);
 | |
|     }
 | |
| 
 | |
| 
 | |
| }
 |