Java计算文件压缩
有没有一种方法可以通过读取文件来获得可能的压缩比
你知道,有些文件比其他文件更可压缩。。。我的软件必须告诉我文件可能压缩的百分比
e、 g.
Compression Ratio: 50%
->;如果我压缩文件,可以节省50%的空间
Compression Ratio: 99%
->;如果压缩文件,我只能节省1%的空间
你可以在下面搜索框中键入要查询的问题!
有没有一种方法可以通过读取文件来获得可能的压缩比
你知道,有些文件比其他文件更可压缩。。。我的软件必须告诉我文件可能压缩的百分比
e、 g.
Compression Ratio: 50%
->;如果我压缩文件,可以节省50%的空间
Compression Ratio: 99%
->;如果压缩文件,我只能节省1%的空间
# 1 楼答案
首先,这在很大程度上取决于您选择的压缩方法。第二,我严重怀疑,如果没有时间和空间复杂度的计算,它是否可能与实际的压缩相比。我认为最好的办法是压缩文件,跟踪已经生成的文件的大小,然后删除/释放(显然,一旦完成),而不是将其写出来
要真正做到这一点,除非您真的想自己实现它,否则使用java.util.zip类可能是最容易的,特别是^{} 类及其
deflate
方法# 2 楼答案
首先,你需要学习信息理论。信息论领域有两种理论:
因此,如果不计算实际压缩,就无法找到压缩大小。但是,如果你需要一个近似值,你可以依赖香农熵理论,建立一个简单的统计模型。下面是一个非常简单的解决方案:
您的估计将或多或少与ZIP的默认压缩算法(deflate)相同Here是同一想法的更高级版本(请注意它使用了大量内存!)。它实际上使用熵来确定块边界,以应用分割将文件分割为同质数据
# 3 楼答案
不检查文件就不可能。您所能做的唯一一件事是,通过实际压缩和测量,根据从相对较大的样本中收集的统计数据,按文件扩展名获得一个近似比率。例如,统计分析可能会表明这一点。拉链jpg不是高度可压缩的,但是像这样的文件。txt和。doc可能是高度可压缩的
这样做的结果仅用于粗略的指导,在某些情况下可能会有很大的偏差,因为文件扩展名绝对不能保证可压缩性。该文件可以包含任何内容,无论扩展名是什么
更新:假设您可以检查该文件,那么您可以使用
java.util.zip
api读取原始文件并对其进行压缩,并查看前后的差异