Tôi cần phải nén một mảng byte. Vì vậy, tôi đã viết đoạn này:Sử dụng Gzip để nén/giải nén một mảng byte
class Program
{
static void Main()
{
var test = "foo bar baz";
var compressed = Compress(Encoding.UTF8.GetBytes(test));
var decompressed = Decompress(compressed);
Console.WriteLine("size of initial table = " + test.Length);
Console.WriteLine("size of compressed table = " + compressed.Length);
Console.WriteLine("size of decompressed table = " + decompressed.Length);
Console.WriteLine(Encoding.UTF8.GetString(decompressed));
Console.ReadKey();
}
static byte[] Compress(byte[] data)
{
using (var compressedStream = new MemoryStream())
using (var zipStream = new GZipStream(compressedStream, CompressionMode.Compress))
{
zipStream.Write(data, 0, data.Length);
zipStream.Close();
return compressedStream.ToArray();
}
}
static 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();
}
}
}
Vấn đề là tôi nhận được kết quả này:
Tôi không hiểu tại sao kích thước của mảng nén lớn hơn một giải nén!
Bất kỳ ý tưởng nào?
Sửa
sau khi bình luận @ tiêu pha của: nếu tôi thay đổi test
chuỗi ví dụ:
var test = "foo bar baz very long string for example hdgfgfhfghfghfghfghfghfghfghfghfghfghfhg";
tôi nhận được kết quả khác nhau. Vậy kích thước tối thiểu của mảng ban đầu sẽ được nén là bao nhiêu?
Bởi vì dữ liệu là quá nhỏ mà các chi phí chung của định dạng nén lớn hơn những lợi ích nén. Thử thêm dữ liệu. Lưu ý: dữ liệu hoàn toàn ngẫu nhiên sẽ không nén. – spender
@spender plz xem chỉnh sửa của tôi và đăng ý tưởng của bạn dưới dạng câu trả lời, cảm ơn –