java - 如果我想使用霍夫曼代码压缩图像,我的频率阵列应该有多大?
问题描述
所以我一直在实现霍夫曼代码来压缩文本文件,这就是我一直在计算每个字符的重复次数的方式
BufferedInputStream fin = new BufferedInputStream(new FileInputStream(f));
byte[] b = new byte[(int) f.length()];
int[] counter = new int[256];
for(int i = 0; i < b.length; i++) {
char ch = (char) b[i];
counter[ch]++;
}
我想扩展我的霍夫曼代码以压缩其他类型的文件,但我不确定该怎么做?我做一个数组来容纳所有可能的未编码字符吗
int[] counter=new int[65536];
我不认为制作一个那么大的数组就足够了,但我不确定还能怎么做?
解决方案
将字符处理为编码为 UTF-8 的字节序列。然后只保留你的字节频率编码。
推荐阅读
- c# - OOxml 或 Office OpenXML C# - 从 DataTable 导出到 excel 布尔数据类型导致修复 excel
- javascript - 链接时如何使用 JS 承诺?
- mongodb - 如何在不使用 $unwind 的情况下加快聚合查询,包括数组中的日期字符串比较?
- android - 在我的 MacBook 上的 Android Studio 中完成了我在 Flutter 上的应用程序编码,如何在 android 手机/iphone/ipad 上使用它?
- apache-spark - 如何使用 scala 从 Spark 读取 Hive Hbase 表
- javascript - 使用 Slick Carousel 同步图像
- javascript - 如何使我的图像从旋转到直(HTML,CSS,JS,)
- vba - MS Access:将数据验证规则复制/粘贴到多个字段?
- javascript - 类型“void”Angular 9 上不存在属性“管道”
- c# - 加了几个小数后,再给HashSet加一个大数:会发生什么?