线程“main”中的异常java.util.zip.DataFormatException:标头检查不正确

时间:2014-01-04 06:07:25

标签: java string compression

我用Java编写了一个用于压缩和编写的应用程序。使用Deflaor和Inflator解压缩String。但是,当我运行以下代码时,我得到以下异常。任何人都可以告诉我一些解决方案

Deflated String:x��Q�n�0��@>"C��E����3�,[
d����9��P������x�O�����hcy��L
�Ct��{~m�I:�$�%\HD+�I�
�NwG
Exception in thread "main" java.util.zip.DataFormatException: incorrect header check
    at java.util.zip.Inflater.inflateBytes(Native Method)
    at java.util.zip.Inflater.inflate(Inflater.java:223)
    at java.util.zip.Inflater.inflate(Inflater.java:240)
    at sample_ftp.Sample_ftp.main(Sample_ftp.java:70)
Java Result: 1

我的代码是这个

        // Encode a String into bytes
        String inputString = "Pehla nasha Pehla khumaar Naya pyaar hai naya intezaar Kar loon main kya apna haal Aye dil-e-bekaraar Mere dil-e-bekaraar Tu hi bata Pehla nasha Pehla khumaar Udta hi firoon in hawaon mein kahin Ya main jhool jaoon in ghataon mein kahin Udta hi firoon in hawaon mein kahin Ya main jhool jaoon in ghataon mein kahin Ek kar doon aasmaan zameen Kaho yaaron kya karoon kya nahin Pehla nasha Pehla khumaar Naya pyaar hai naya intezaar Kar loon main kya apna haal Aye dil-e-bekaraar Mere dil-e-bekaraar Tu hi bata Pehla nasha Pehla khumaar Usne baat ki kuchh aise dhang se Sapne de gaya vo hazaaron range ke Usne baat ki kuchh aise dhang se Sapne de gaya vo hazaaron range ke Reh jaoon jaise main haar ke Aur choome vo mujhe pyaar se Pehla nasha Pehla khumaar Naya pyaar hai naya intezaar Kar loon main kya apna haal Aye dil-e-bekaraar Mere dil-e-bekaraar";
        byte[] input = inputString.getBytes("UTF-8");

        // Compress the bytes
        byte[] output1 = new byte[100];
        Deflater compresser = new Deflater();
        compresser.setInput(input);
        compresser.finish();
        int compressedDataLength = compresser.deflate(output1);
        compresser.end();
        System.out.println("Deflated String:"+new String(output1));

        String str=new String(output1);
        byte output2[]=str.getBytes("UTF-8");

         // Decompress the bytes
        Inflater decompresser = new Inflater();
        decompresser.setInput(output2);
        byte[] result = new byte[10000];
        int resultLength = decompresser.inflate(result);
        decompresser.end();

        // Decode the bytes into a String
        String outputString = new String(result, 0, resultLength, "UTF-8");
        System.out.println("Deflated String:"+outputString);

1 个答案:

答案 0 :(得分:5)

您的代码存在一些问题:

1)您的假设是带有平减指数的字节数组output1可能是有效的String,没有有效的编码 - 从您的代码可以看出:

String str=new String(output1);
byte output2[]=str.getBytes("UTF-8");

相反,不要不必要地转换再见数组表示,而是直接传递它:decompresser.setInput(output1)

编辑:根据评论中的新要求进行了更改

2)您正在为inflate设置一个空字节数组,这也会导致空字符串(此处):

byte[] result = new byte[10000];
int resultLength = decompresser.inflate(result);

3)您将压缩缓冲区大小限制为100;我已经增加了它以适应你的整个字符串

byte[] output1 = new byte[input.length];

您可以使用从String派生的字节数组或前一个字节数组

编辑:正如评论中所指出的那样,要求是专门从String中获取字节数组,因此以String格式表示二进制数据 Base64 编码方案将发挥作用,修改代码:

import org.apache.axis.encoding.Base64;

更改了代码:

public static void main(String[] args) {
    try {
        // Encode a String into bytes
        String inputString = "Pehla nasha Pehla khumaar Naya pyaar hai naya intezaar Kar loon main kya apna haal Aye dil-e-bekaraar Mere dil-e-bekaraar Tu hi bata Pehla nasha Pehla khumaar Udta hi firoon in hawaon mein kahin Ya main jhool jaoon in ghataon mein kahin Udta hi firoon in hawaon mein kahin Ya main jhool jaoon in ghataon mein kahin Ek kar doon aasmaan zameen Kaho yaaron kya karoon kya nahin Pehla nasha Pehla khumaar Naya pyaar hai naya intezaar Kar loon main kya apna haal Aye dil-e-bekaraar Mere dil-e-bekaraar Tu hi bata Pehla nasha Pehla khumaar Usne baat ki kuchh aise dhang se Sapne de gaya vo hazaaron range ke Usne baat ki kuchh aise dhang se Sapne de gaya vo hazaaron range ke Reh jaoon jaise main haar ke Aur choome vo mujhe pyaar se Pehla nasha Pehla khumaar Naya pyaar hai naya intezaar Kar loon main kya apna haal Aye dil-e-bekaraar Mere dil-e-bekaraar";
        byte[] input = inputString.getBytes("UTF-8");

        // Compress the bytes
        byte[] output1 = new byte[input.length];
        Deflater compresser = new Deflater();
        compresser.setInput(input);
        compresser.finish();
        int compressedDataLength = compresser.deflate(output1);
        compresser.end();

        String str = Base64.encode(output1);
        System.out.println("Deflated String:" + str);

        byte[] output2 = Base64.decode(str);

        // Decompress the bytes
        Inflater decompresser = new Inflater();
        decompresser.setInput(output2);
        byte[] result = str.getBytes();
        int resultLength = decompresser.inflate(result);
        decompresser.end();

        // Decode the bytes into a String
        String outputString = new String(result, 0, resultLength, "UTF-8");
        System.out.println("Deflated String:" + outputString);
    } catch (UnsupportedEncodingException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (DataFormatException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

}

<强>输出:

Deflated String:eJzNUbtuwzAM/BX+QD4iQ6eiRdDH0PESM6YsWwpku4X99Tna7lC03QK0g42TeOQdTwe1FpLQG+Sw4GhjBxR5xAS5TA4NgRQeQxp09pt7fm3OSTqEJJElXBJIRCv7SaUK7U53R40oTn/Q8u3uZRQLcsTwKfyTideKZdLOobgatQwfcF11XRj/b1hdNJZzKw02Ym0c/ZV522l3kaBI5Qygp98kMzrVxHgsi0eX13DIyxtMS+/vG/+P2Puk5GCQGCSOJzNB6DnLkGoheKYujyq1+3vPtDCv6xYyVKLeZMaT2vYEzdK7rG3ukMX9WOTEV+rUm7uxMd2CI/PPAr4Cer8r5QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Deflated String:Pehla nasha Pehla khumaar Naya pyaar hai naya intezaar Kar loon main kya apna haal Aye dil-e-bekaraar Mere dil-e-bekaraar Tu hi bata Pehla nasha Pehla khumaar Udta hi firoon in hawaon mein kahin Ya main jhool jaoon in ghataon mein kahin Udta hi firoon in hawaon mein kahin Ya main jhool jaoon in ghataon mein kahin Ek kar doon aasmaan zameen Kaho yaaron kya karoon kya nahin Pehla nasha Pehla khumaar Naya pyaar hai naya intezaar Kar loon main kya apna haal Aye dil-e-bekaraar Mere dil-e-bekaraar Tu hi bata Pehla nasha Pehla khumaar Usne baat ki kuchh aise dhang se Sapne de gaya vo hazaaron range ke Usne baat ki kuchh aise dhang se Sapne de gaya vo hazaaron range ke Reh jaoon jaise main haar ke Aur choome vo mujhe pyaar se Pehla nasha Pehla khumaar Naya pyaar hai naya intezaar Kar loon main kya apna haal Aye dil-e-bekaraar Mere dil-e-bekaraar

.....