【发布时间】:2012-07-14 05:54:28
【问题描述】:
我想压缩一些数据,所以我想我会通过 deflate 来运行流
它从 304 字节变为 578 字节。那是 1.9 倍大。我试图压缩它...... 我在这里做错了什么?
using (MemoryStream ms2 = new MemoryStream())
using (var ms = new DeflateStream(ms2, CompressionMode.Compress, true))
{
ms.WriteByte(1);
ms.WriteShort((short)txtbuf.Length);
ms.Write(txtbuf, 0, txtbuf.Length);
ms.WriteShort((short)buf2.Length);
ms.Write(buf2, 0, buf2.Length);
ms.WriteShort((short)buf3.Length);
ms.Write(buf3, 0, buf3.Length);
ms.Flush();
result_buf = ms2.ToArray();
}
【问题讨论】:
-
如果将数据放入文件中并压缩会怎样?
-
@GregHewgill zip 给我 465,gz 给我 349,原始是 319。(我不知道我改变了什么,但数据是在每次运行中随机生成的)。我无法告诉 .NET deflate 尝试做什么,因为我将流设为 io 流。我必须编写更多代码来检查此运行中的数据
-
204 字节小于 1 个网络数据包,也小于 1 个磁盘扇区(在最新的 4k 扇区磁盘上远小于 1 个)。压缩如此少量数据的开销将压倒任何通常不会节省的大小(即使您没有遇到此问题)。
-
@Richard 这是一个快速测试。我的txtbuf会更长。然而,公认的答案完美地解释了事情
标签: .net stream compression deflate