Cony_14 2016-03-15 10:24 采纳率: 50%
浏览 1316
已结题

新手请教java文件操作的一个小问题~十分感谢

这个类的功能是将任意一个二进制文件中的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");
    }

}

  • 写回答

1条回答

  • threenewbee 2016-03-15 10:37
    关注

    看你的目标文件,也不是什么数量+00啊,而且你的山寨压缩算法存在问题,比如010100到底是01后面接1个00还是0101个00呢?找一本初级数据结构的教材,把哈夫曼编码的概念先看看吧。

    评论

报告相同问题?

悬赏问题

  • ¥15 求帮我调试一下freefem代码
  • ¥15 R语言Rstudio突然无法启动
  • ¥15 关于#matlab#的问题:提取2个图像的变量作为另外一个图像像元的移动量,计算新的位置创建新的图像并提取第二个图像的变量到新的图像
  • ¥15 改算法,照着压缩包里边,参考其他代码封装的格式 写到main函数里
  • ¥15 用windows做服务的同志有吗
  • ¥60 求一个简单的网页(标签-安全|关键词-上传)
  • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图