这个类的功能是将任意一个二进制文件中的0压缩成0的数目+0的形式
即:将二进制文件中16进制显示的00压缩成 "0的数目+00的形式"
如00 00 00 1A 压缩成03 00 1A
待压缩文件16进制内容:
代码执行后后生成的文件却成了如图所示的情况
求教什么地方出错了,万分感谢。
import java.io.*;
public class FileCompression
{ public static void main(String args[]) throws Exception
{
FCompression();
}
//将二进制文件中16进制显示的00压缩成 "0的数目+00的形式"
//如00 00 00 1A 压缩成03 00 1A
public static void FCompression()throws Exception
{
File dFile=new File("E:/Picture Collections/dest.cpac");//压缩生成目标文件
File file = new File("E:/Picture Collections/dest.pac");//待压缩文件
FileInputStream fin=new FileInputStream(file);
BufferedInputStream bin=new BufferedInputStream(fin);
PushbackInputStream pbin=new PushbackInputStream(bin);
//DataInputStream din=new DataInputStream(fin);
FileOutputStream fout = new FileOutputStream(dFile,true);
DataOutputStream dout=new DataOutputStream(fout);
byte[] bt=new byte[1];
int len=0;
int i=0;//i代表00 的数目 1byte=2个16进制位
int temp;
while( (len = fin.read(bt)) != -1 )
{
if (bt[0]==0&&(temp=pbin.read())==0)//若读取的数和它后的数字都为0则跳过
{
pbin.unread(temp);//推回预读的下一位
i++;
//调试语句System.out.println("--"+i);
}
else if (bt[0]==0&&(temp=pbin.read())!=0)//若读取的数为0,但它后的数不为0
{
pbin.unread(temp);
i++;
//调试语句System.out.println("+++++++");
dout.writeByte(i);//写入00 的个数
dout.writeByte(0);//写入0
i=0;//重置i
}
else
{
//调试语句System.err.println("----");
fout.write(bt,0,len);
}
}
dout.close();
pbin.close();
System.out.println("Compress successfully");
}
}