Re: Сжатие данных GZipStream
От: Dan Ignatov Россия  
Дата: 19.06.08 10:33
Оценка:
Здравствуйте, SeLo, Вы писали:

SL>Сжатие данных не работает так как хотелось бы:


и действительно, не работает. давненько хотел написать, да все рука не поднималась по-аглицки...

        public static byte[] CompressData(byte[] data) {
            if(data != null) {
                using(MemoryStream ms = new MemoryStream()) {
                    using(GZipStream deflater = new GZipStream(ms, CompressionMode.Compress, true)) {
                        deflater.Write(data, 0, data.Length);
                    }
                    return ms.ToArray();
                }
            }
            else {
                return null;
            }
        }

        [Test/*, Ignore("CompressionUtils.CompressData compresses 1Mb of data into 1.6Mb!!! of compressed data")*/]
        public void TestCompressionRate() {
            byte[] nonCompressableSource = new byte[1024 * 1024];
            System.Random rnd = new Random();
            rnd.NextBytes(nonCompressableSource);

            byte[] compressedNonCompressableSource = CompressionUtils.CompressData(nonCompressableSource);
            Assert.IsTrue(compressedNonCompressableSource.Length < nonCompressableSource.Length,
                "{0} : {1}", compressedNonCompressableSource.Length, nonCompressableSource.Length);
        }



-----------------

compressedNonCompressableSource.Length 1610496 int
nonCompressableSource.Length 1048576 int
-----------------

ну и кто мне объяснит, что я делаю не так??? почему и 1Мб получается 1.6Мб ????
поток в результате получается вполне читабельный для распаковщиков (pkunzip), но те же самые упаковщики (pkzip) делают из этого потока 1 049 004 bytes.
почему?

Thanks, Dan.
Thanks,
Dan
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.