最后就是把文件中的所有字节按照这种哈弗曼的编码方式保存到文件中,过程类似于上一步(在最后打入末尾补入的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 到这里,整个压缩过程基本完成了,解压缩就是压缩的逆过程,在此不再赘述,所有的操作都保存在附上源代码中。 |