Сжать байт [] в c # - PullRequest
       32

Сжать байт [] в c #

0 голосов
/ 20 октября 2019

У меня есть метод, который распаковывает байтовый массив, и мне нужна противоположность этой функции (имеется в виду Compress). Я много гуглил, но не нашел точной противоположности этой функции

public static byte[] Decompress(byte[] B)
{

        MemoryStream ms = new MemoryStream(B);
        GZipStream gzipStream = new GZipStream((Stream)ms, CompressionMode.Decompress);
        byte[] buffer = new byte[4];
        ms.Position = checked(ms.Length - 5L);
        ms.Read(buffer, 0, 4);
        int count = BitConverter.ToInt32(buffer, 0);
        ms.Position = 0L;
        byte[] AR = new byte[checked(count - 1 + 1)];
        gzipStream.Read(AR, 0, count);
        gzipStream.Dispose();
        ms.Dispose();
        return AR;

}

1 Ответ

1 голос
/ 20 октября 2019

Вы слишком усложнили распаковку. Вы можете достичь того, чего хотите, просто используя потоки и копирование.

        private byte[] Compress(byte[] data)
        {
            using (var compressedStream = new MemoryStream())
            using (var zipStream = new GZipStream(compressedStream, CompressionMode.Compress))
            {
                zipStream.Write(data, 0, data.Length);
                return compressedStream.ToArray();
            }
        }

        private byte[] Decompress(byte[] data)
        {
            using (var compressedStream = new MemoryStream(data))
            using (var zipStream = new GZipStream(compressedStream, CompressionMode.Decompress))
            using (var resultStream = new MemoryStream())
            {
                zipStream.CopyTo(resultStream);
                return resultStream.ToArray();
            }
        }
...