Skip to content

Commit 829c6b6

Browse files
authored
StreamHelpers: Remove ThreadStatic buffer and use stack allocated spans instead
1 parent 31a8b0c commit 829c6b6

File tree

1 file changed

+21
-30
lines changed

1 file changed

+21
-30
lines changed

SteamKit2/SteamKit2/Util/StreamHelpers.cs

Lines changed: 21 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -7,69 +7,60 @@ namespace SteamKit2
77
{
88
internal static class StreamHelpers
99
{
10-
[ThreadStatic]
11-
static byte[]? data;
12-
13-
[MemberNotNull(nameof(data))]
14-
static void EnsureInitialized()
15-
{
16-
data ??= new byte[ 8 ];
17-
}
18-
1910
public static short ReadInt16(this Stream stream)
2011
{
21-
EnsureInitialized();
12+
Span<byte> data = stackalloc byte[2];
2213

23-
stream.Read( data, 0, 2 );
24-
return BitConverter.ToInt16( data, 0 );
14+
stream.Read( data );
15+
return BitConverter.ToInt16( data );
2516
}
2617

2718
public static ushort ReadUInt16(this Stream stream)
2819
{
29-
EnsureInitialized();
20+
Span<byte> data = stackalloc byte[2];
3021

31-
stream.Read( data, 0, 2 );
32-
return BitConverter.ToUInt16( data, 0);
22+
stream.Read( data );
23+
return BitConverter.ToUInt16( data );
3324
}
3425

3526
public static int ReadInt32(this Stream stream)
3627
{
37-
EnsureInitialized();
28+
Span<byte> data = stackalloc byte[4];
3829

39-
stream.Read( data, 0, 4 );
40-
return BitConverter.ToInt32( data, 0 );
30+
stream.Read( data );
31+
return BitConverter.ToInt32( data );
4132
}
4233

4334
public static long ReadInt64(this Stream stream)
4435
{
45-
EnsureInitialized();
36+
Span<byte> data = stackalloc byte[8];
4637

47-
stream.Read( data, 0, 8 );
48-
return BitConverter.ToInt64( data, 0 );
38+
stream.Read( data );
39+
return BitConverter.ToInt64( data );
4940
}
5041

5142
public static uint ReadUInt32(this Stream stream)
5243
{
53-
EnsureInitialized();
44+
Span<byte> data = stackalloc byte[4];
5445

55-
stream.Read(data, 0, 4);
56-
return BitConverter.ToUInt32( data, 0);
46+
stream.Read( data );
47+
return BitConverter.ToUInt32( data );
5748
}
5849

5950
public static ulong ReadUInt64(this Stream stream)
6051
{
61-
EnsureInitialized();
52+
Span<byte> data = stackalloc byte[8];
6253

63-
stream.Read( data, 0, 8 );
64-
return BitConverter.ToUInt64( data, 0 );
54+
stream.Read( data );
55+
return BitConverter.ToUInt64( data );
6556
}
6657

6758
public static float ReadFloat( this Stream stream )
6859
{
69-
EnsureInitialized();
60+
Span<byte> data = stackalloc byte[4];
7061

71-
stream.Read( data, 0, 4 );
72-
return BitConverter.ToSingle( data, 0 );
62+
stream.Read( data );
63+
return BitConverter.ToSingle( data );
7364
}
7465

7566
public static string ReadNullTermString( this Stream stream, Encoding encoding )

0 commit comments

Comments
 (0)