a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 67|回复: 0

[基础知识] JAVA基础:用哈弗曼编码实现压缩软件(3)

[复制链接]
发表于 2012-8-4 12:37:27 | 显示全部楼层 |阅读模式
 最后就是把文件中的所有字节按照这种哈弗曼的编码方式保存到文件中,过程类似于上一步(在最后打入末尾补入的0的个数,主要是为了方便解压缩):Java代码//编码表输出完毕,将文件中的字节按照这种编码方式压缩 # v  W) d7 P& h. y% s9 ]! Q* D- u8 y
  InputStream ins = new FileInputStream(pathName_former);
! ^* ?0 n8 x6 W( @  InputStream buf = new BufferedInputStream(ins);//创建输入流
2 ?- _: X. n6 X" f7 q0 m( L! H  count = 0; / x; v( [; l: e, t1 E* k4 a
  writeCode = "";
- U6 G9 ~" T! t7 t  allCode = "";
( d( t" y+ U. U8 }9 q  while(buf.available()>0||count>=8){
4 v1 z+ A) y0 X( n0 C, V& q  if(count>=8){//满8
# W: X$ H! F% O  writeCode = allCode.substring(0,8);//前8位
, L' @' L% K) J; R3 U+ p  count-=8;
& C7 Q" K3 l5 m. w1 ~+ O  allCode = allCode.substring(8);
/ a( I; }  _! g; p* I7 Q  bos.write(changeString(writeCode));//写入一个字节
; S9 t' M) j- x) c& j9 |  }else{   n  ]5 n, T6 F$ l# f
  int data = buf.read(); ! ^! ?; Z, M4 J! K9 T& a) R5 t
  count+=Code[data].length();
, i) v: L6 ]* }9 q; `# T6 X  allCode+=Code[data]; 9 z8 E+ @. W$ \# \5 ~' b
  } % j7 H$ Q5 l7 U3 F7 t5 X
  } 3 s" ?0 _/ o5 _3 ^% v
  //如果不满8位的 来自www.Examw.com- {7 `: X& v( W( G8 w
  if(allCode.length()>0){ , f1 ^* t( n* u3 D( l/ i
  int len = 8-allCode.length();//补零
9 v, o/ `. I- H3 _- Y  for(int j=0;j " s, X& i4 m0 A8 ]( ~
  allCode+="0";
9 k, ]$ h% Y8 o2 Q  } ( E* C7 n- ~) Z6 K: {" a- G0 M
  bos.write(changeString(allCode)); ( q! Q; `( {! O% z2 |
  bos.write(len);//补入了几个0
0 ?9 c' Z2 o( R, Q  }else{
5 x$ [. k/ V, e. R; _  bos.write(0);//补入了0个0 4 u) W6 y1 n- Q9 @
  }
! y" |4 w$ S1 @5 E  到这里,整个压缩过程基本完成了,解压缩就是压缩的逆过程,在此不再赘述,所有的操作都保存在附上源代码中。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-5-15 14:08 , Processed in 0.219200 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表