var file = new FileStream("random.txt", FileMode.Create);
var random = new Random();
for (int i = 0; i < 100000000; i++)
{
var bytesToWrite = BitConverter.GetBytes(random.Next(int.MaxValue));
file.Write(bytesToWrite, 0, bytesToWrite.Length);
}
file.Close();
当你只是在文本文件中添加一些随机数时 然后压缩它变得更大,或者它将保持与文本
相同的大小任何人都知道如何或为什么这会发生?
答案 0 :(得分:6)
文本文件倾向于很好地压缩,因为它们反复使用相同的数据。向文件中添加一些随机数会使文件不那么规律,因此大多数压缩算法都会更难以压缩文件。
阅读压缩算法以更好地理解这一点。 https://en.wikipedia.org/wiki/File_compression
答案 1 :(得分:5)
压缩算法不会保证它会变小。
原因很简单,没有足够的唯一值可以生成更小的 例如:
如果您有10位世界,则可以生成2 ^ 10个值。让我们假设你可以压缩它们。但是,如果你删除一点,你只能拥有2 ^ 9个值。因此,有许多原始值永远无法正确压缩,并且会解压缩回原始值。
因此,大多数压缩算法都会考虑到普通数据不是随机的,并且是重复的,或者背后有一些基本规则。
像文本只使用了一定数量的字符,所以你可以很好地压缩它们。
答案 2 :(得分:1)
嗯,你生成的是随机二进制文件。当然,WinRar很难压缩它。
如果您将文件保存为txt,将数字作为文本保存,您将看到有压缩空间。
var file = File.CreateText("random.txt");
var random = new Random();
for (int i = 0; i < 1000000; i++)
{
file.Write(random.Next());
}
file.Close();
答案 3 :(得分:1)
我发现一篇有趣的文章:
http://matt.might.net/articles/why-infinite-or-guaranteed-file-compression-is-impossible/
此外我还记得前段时间读过基于压缩算法声称授予的专利,该算法保证输出的输出永远不会大于输入...我找不到相同的文章但是我有发现这个更具挑战性:
http://gailly.net/05533051.html
享受阅读
答案 4 :(得分:0)
如果字节顺序是真正随机的,那么您将不会注意到大小的任何变化。甚至有一些rar文件可能比它包含的文件大的实例(我假设是因为rar容器中头文件的一些开销)。