From 2a451bc049c3ff212ea9153a235e41d70c668ee7 Mon Sep 17 00:00:00 2001 From: Serge Camille Date: Mon, 17 Aug 2020 20:06:42 +0200 Subject: [PATCH] TSDU: Use Array.Copy for Read functions. --- S7.Net/COTP.cs | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/S7.Net/COTP.cs b/S7.Net/COTP.cs index 8f60423..c1eb32e 100644 --- a/S7.Net/COTP.cs +++ b/S7.Net/COTP.cs @@ -106,19 +106,17 @@ namespace S7.Net var segment = TPDU.Read(stream); var buffer = new byte[segment.Data.Length]; - var output = new MemoryStream(buffer); - output.Write(segment.Data, 0, segment.Data.Length); + Array.Copy(segment.Data, buffer, segment.Data.Length); while (!segment.LastDataUnit) { segment = TPDU.Read(stream); + var previousLength = buffer.Length; Array.Resize(ref buffer, buffer.Length + segment.Data.Length); - var lastPosition = output.Position; - output = new MemoryStream(buffer); - output.Write(segment.Data, (int) lastPosition, segment.Data.Length); + Array.Copy(segment.Data, 0, buffer, previousLength, segment.Data.Length); } - return buffer.Take((int)output.Position).ToArray(); + return buffer; } /// @@ -132,18 +130,17 @@ namespace S7.Net var segment = await TPDU.ReadAsync(stream); var buffer = new byte[segment.Data.Length]; - var output = new MemoryStream(buffer); - output.Write(segment.Data, 0, segment.Data.Length); + Array.Copy(segment.Data, buffer, segment.Data.Length); while (!segment.LastDataUnit) { segment = await TPDU.ReadAsync(stream); + var previousLength = buffer.Length; Array.Resize(ref buffer, buffer.Length + segment.Data.Length); - var lastPosition = output.Position; - output = new MemoryStream(buffer); - output.Write(segment.Data, (int) lastPosition, segment.Data.Length); + Array.Copy(segment.Data, 0, buffer, previousLength, segment.Data.Length); } - return buffer.Take((int)output.Position).ToArray(); + + return buffer; } } }