From 37d03863bb008ee6136f751e62d1af75a805f46f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Leone?= Date: Sat, 25 Jun 2016 21:28:04 +0200 Subject: [PATCH] Added a const variable to set the default size of the buffer array Using the buffer with readstring --- Lidgren.Network/NetBuffer.Read.cs | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/Lidgren.Network/NetBuffer.Read.cs b/Lidgren.Network/NetBuffer.Read.cs index d083240..e499a0e 100644 --- a/Lidgren.Network/NetBuffer.Read.cs +++ b/Lidgren.Network/NetBuffer.Read.cs @@ -17,7 +17,7 @@ namespace Lidgren.Network public partial class NetBuffer { private const string c_readOverflowError = "Trying to read past the buffer size - likely caused by mismatching Write/Reads, different size or order."; - + private const int c_bufferSize = 64; // Min 8 to hold anything but strings. Increase it if readed strings usally don't fit inside the buffer private static byte[] s_buffer; /// @@ -355,7 +355,7 @@ namespace Lidgren.Network return retval; } - byte[] bytes = Interlocked.Exchange(ref s_buffer, null) ?? new byte[8]; + byte[] bytes = Interlocked.Exchange(ref s_buffer, null) ?? new byte[c_bufferSize]; ReadBytes(bytes, 0, 4); float res = BitConverter.ToSingle(bytes, 0); s_buffer = bytes; @@ -380,7 +380,7 @@ namespace Lidgren.Network return true; } - byte[] bytes = Interlocked.Exchange(ref s_buffer, null) ?? new byte[8]; + byte[] bytes = Interlocked.Exchange(ref s_buffer, null) ?? new byte[c_bufferSize]; ReadBytes(bytes, 0, 4); result = BitConverter.ToSingle(bytes, 0); s_buffer = bytes; @@ -402,7 +402,7 @@ namespace Lidgren.Network return retval; } - byte[] bytes = Interlocked.Exchange(ref s_buffer, null) ?? new byte[8]; + byte[] bytes = Interlocked.Exchange(ref s_buffer, null) ?? new byte[c_bufferSize]; ReadBytes(bytes, 0, 8); double res = BitConverter.ToDouble(bytes, 0); s_buffer = bytes; @@ -604,8 +604,16 @@ namespace Lidgren.Network return retval; } - byte[] bytes = ReadBytes(byteLen); - return System.Text.Encoding.UTF8.GetString(bytes, 0, bytes.Length); + if (byteLen <= c_bufferSize) { + byte[] buffer = Interlocked.Exchange(ref s_buffer, null) ?? new byte[c_bufferSize]; + ReadBytes(buffer, 0, byteLen); + string retval = Encoding.UTF8.GetString(buffer, 0, byteLen); + s_buffer = buffer; + return retval; + } else { + byte[] bytes = ReadBytes(byteLen); + return Encoding.UTF8.GetString(bytes, 0, bytes.Length); + } } ///