Здравствуйте, 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.