Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Exception in thread "main" java.util.zip.DataFormatException: incorrect header check

I've written an application in Java for compressing and decompressing a String using Deflaor and Inflator, but when I run it I get the following exception:

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

My code:

        // 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);
like image 579
user3159579 Avatar asked Jan 04 '14 06:01

user3159579


1 Answers

Couple of problems with your code here:

1) Your assumption is the Byte Array output1 returned with deflator can be a valid String without a valid encoding - evident from your code here:

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

Instead, don't unnecessarily convert the bye array representation but pass it directly as is: decompresser.setInput(output1)

EDIT: Changed as per the new requirement in the comments

2) You are setting a blank byte array to your inflate, which would result in a blank String too (here):

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

3) You have limited your compressed buffer size to be 100; I have increased it to accommodate your entire String

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

You can use a byte array here derived from your String or the previous byte array

Edit: As pointed out in the comments, the requirement is to specifically get the byte array to/from a String, hence to represent Binary data in a String format Base64 encoding scheme will come into play, modifying the code to that effect:

import org.apache.axis.encoding.Base64;

Changed code:

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();
    }

}

Output:

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

.....

like image 159
StoopidDonut Avatar answered Oct 29 '22 21:10

StoopidDonut