Browse Source

removed extra memory stream

v2
Marcus Cuda 14 years ago
parent
commit
9851d536e1
  1. 33
      src/Numerics.IO/LinearAlgebra/IO/MatlabWriter.cs

33
src/Numerics.IO/LinearAlgebra/IO/MatlabWriter.cs

@ -286,30 +286,19 @@ namespace MathNet.Numerics.LinearAlgebra.IO
private static byte[] CompressData(byte[] data) private static byte[] CompressData(byte[] data)
{ {
var adler = BitConverter.GetBytes(Adler32.Compute(data)); var adler = BitConverter.GetBytes(Adler32.Compute(data));
using (var stream = new MemoryStream()) using (var compressedStream = new MemoryStream())
{ {
stream.WriteByte(0x58); compressedStream.WriteByte(0x58);
stream.WriteByte(0x85); compressedStream.WriteByte(0x85);
using (var compressedStream = new MemoryStream()) using (var outputStream = new DeflateStream(compressedStream, CompressionMode.Compress, true))
{ {
using (var outputStream = new DeflateStream(compressedStream, CompressionMode.Compress)) outputStream.Write(data, 0, data.Length);
{ }
outputStream.Write(data, 0, data.Length); compressedStream.WriteByte(adler[3]);
} compressedStream.WriteByte(adler[2]);
//something odd - we need to write the CRC to the memory stream before returning compressedStream.WriteByte(adler[1]);
//however, the CRC is being added before the data is compressed. It seems that compressedStream.WriteByte(adler[0]);
//both the memorystream and deflate stream need to be closed first, but then return compressedStream.ToArray();
//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();
} }
} }

Loading…
Cancel
Save