From 9851d536e1115295c3c0df814cba5ac79b349185 Mon Sep 17 00:00:00 2001 From: Marcus Cuda Date: Mon, 28 Jan 2013 08:59:43 +0200 Subject: [PATCH] removed extra memory stream --- .../LinearAlgebra/IO/MatlabWriter.cs | 33 +++++++------------ 1 file changed, 11 insertions(+), 22 deletions(-) diff --git a/src/Numerics.IO/LinearAlgebra/IO/MatlabWriter.cs b/src/Numerics.IO/LinearAlgebra/IO/MatlabWriter.cs index 6031f00b..73eb9944 100644 --- a/src/Numerics.IO/LinearAlgebra/IO/MatlabWriter.cs +++ b/src/Numerics.IO/LinearAlgebra/IO/MatlabWriter.cs @@ -286,30 +286,19 @@ namespace MathNet.Numerics.LinearAlgebra.IO private static byte[] CompressData(byte[] data) { var adler = BitConverter.GetBytes(Adler32.Compute(data)); - using (var stream = new MemoryStream()) + using (var compressedStream = new MemoryStream()) { - stream.WriteByte(0x58); - stream.WriteByte(0x85); - using (var compressedStream = new MemoryStream()) + compressedStream.WriteByte(0x58); + compressedStream.WriteByte(0x85); + using (var outputStream = new DeflateStream(compressedStream, CompressionMode.Compress, true)) { - using (var outputStream = new DeflateStream(compressedStream, CompressionMode.Compress)) - { - outputStream.Write(data, 0, data.Length); - } - //something odd - we need to write the CRC to the memory stream before returning - //however, the CRC is being added before the data is compressed. It seems that - //both the memorystream and deflate stream need to be closed first, but then - //we cannot append the CRC. So I'm adding a second intermediate memory stream. There should - //be a better way --marcus - var compressedData = compressedStream.ToArray(); - stream.Write(compressedData, 0, compressedData.Length); - } - - stream.WriteByte(adler[3]); - stream.WriteByte(adler[2]); - stream.WriteByte(adler[1]); - stream.WriteByte(adler[0]); - return stream.ToArray(); + outputStream.Write(data, 0, data.Length); + } + compressedStream.WriteByte(adler[3]); + compressedStream.WriteByte(adler[2]); + compressedStream.WriteByte(adler[1]); + compressedStream.WriteByte(adler[0]); + return compressedStream.ToArray(); } }