Итак, я пытаюсь сжать массив байтов (через поток). ExtendedStream - это просто класс, который я создал, который взаимодействует с базовым потоком (по умолчанию MemoryStream). Если я беру свои исходные данные, сжимаю их, распаковываю, а затем сравниваю размер распакованных данных с размером исходных данных (до сжатия), оказывается, что он меньше, чем исходные.
Исходная длина: 51695, сжатая длина: 26014, декомпрессированная длина: 48685.
Я храню тайлы (7 байт). Сжатие с использованием классов GZip, предоставленных в пространстве имен System.IO.Compression.
public static ExtendedStream GZipDecompress(ExtendedStream stream)
{
ExtendedStream outStream = new ExtendedStream();
GZipStream decompressStream = new GZipStream(stream.BaseStream, CompressionMode.Decompress, true);
int b = -1;
while ((b = decompressStream.ReadByte()) != -1)
{
outStream.WriteByte((Byte)b);
}
outStream.Seek(0, SeekOrigin.Begin);
return outStream;
}
public static ExtendedStream GZipCompress(ExtendedStream stream)
{
ExtendedStream outStream = new ExtendedStream(); // base stream is a memorystream
GZipStream compressStream = new GZipStream(outStream.BaseStream, CompressionMode.Compress, true);
compressStream.Write(stream.ToArray(), 0, (int)stream.Length);
compressStream.Flush();
outStream.Seek(0, SeekOrigin.Begin);
return outStream;
}
Надеюсь, этого достаточно.