没有合适的资源?快使用搜索试试~ 我知道了~
开发文档1
资源详情
资源评论
资源推荐
开发文档
一、原理及设计思路
1.原理:
统计文件字节及字节出现次数,利用贪婪算法,根据每个字节权重构建最优哈夫曼
树。根据哈夫曼树,出现次数多的字节用较短的 01 串表示,出现次数少的字节用
较长的 01 串表示,以此实现对文件的压缩。
2.首先实现单个文件的压缩及解压,对于文件夹压缩采用递归方法,最终化为压缩或解
压单个文件
3. 需要根据压缩文件头信息来解压文件,因此需要从解压文件/文件夹方向逆向考虑如
何构建好文件头信息
,
二、遇到的问题及解决方法
1.(最重要的问题)对 Java 尤其是 JavaFX 感到陌生了
答:首先重新理解一下大一写的 project(虽然有点乱,好在知道怎么动手了),其
次就是边学边用
2.使用 hashMap 保存字节及对应 Huffman 编码,在匹配文件字节对应编码以写入到压
缩文件时耗费大量循环查询时间
答:第二次尝试->将 hashMap 转换成按 Huffman 编码长度排序的 TreeMap,但
依旧没多大改变
第三次尝试->意识到 Huffman 树是根据字节出现次数(即权重)构建的最优
树,而每个字节只有 256 种情况,因此没必要使用键值对的 hashMap 或 TreeMap。
将字节对应的 Huffman 编码映射到长为 256 的字符串数组,而字节值即对应数组下标,
由此消除了查找 map 所耗费的大量时间
3.解压文件夹时,如何判断当前正在解压的文件是否解压完毕
答:首先想到将编码前的文件大小写入文件头,但由于解压文件主体部分代码结构
的原因,这种实现方法虽然可行,但不可取。其次就是将编码后文件大小写入文件头,
这样挺好,但由此引出另一个问题:怎么获取编码后(已经在写压缩文件主体部分了)
文件大小?
答:考虑到构建 Huffman 树时计算了每个字节出现的次数,以及根据 Huffman 树
获得了每种字节对应的 Huffman 编码,因此可通过计算每个字节出现次数乘以对应
Huffman 编码长度的总和除以 8 得到编码后文件字节数(考虑到文件头结构的整齐性,
额外加上 2,一代表最后不足八位的一个字节,一代表补零的个数)
4. 解压文件夹时,当压缩文件被移动到另一文件夹时,发生文件/文件夹写入路径不存
在或者写入的路径不是在解压文件夹下的错误
答:在压缩文件夹时,文件头的处理与在压缩单个文件时一样,没有写入相对路径
5. UI 设计部分,在处理大文件时 UI 界面会显示未响应
答:利用多线程,为每一次压缩或解压创建一个新的线程,这样逻辑处理部分就不
KerstinTongxi
- 粉丝: 22
- 资源: 277
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0