I have a dat file which is encoded using flate. I am trying to decode that file using InflateInputStream which is based on ZLib library. But using the below sample gives me
Exception in thread "main" java.util.zip.ZipException: incorrect data check
The .dat file is kept here
Code:-
int buflength = 1;
byte[] buf = new byte[buflength];
FileInputStream is = new FileInputStream(new File(INPUT_DIRECTORY + INPUT_FILE));
Inflater decompresser = new Inflater();
//decompresser.setInput(buf);
InflaterInputStream ifis = new InflaterInputStream(is,decompresser,buflength);
FileOutputStream os = new FileOutputStream(new File(OUTPUT_DIRECTORY + OUTPUT_FILE));
/*Deflater compressor = new Deflater();
DeflaterOutputStream dfos = new DeflaterOutputStream(os, compressor, buflength);
*/
int counter = 0;
//long bytesToCopy = 40000;
int bytesThisRead = 0;
long bytesCopied = 0;
while ((bytesThisRead = ifis.read(buf, 0, buf.length)) != -1)
{
os.write(buf, 0, bytesThisRead);
System.out.println((counter++) + " " + bytesThisRead);
//bytesToCopy -= bytesThisRead;
bytesCopied += bytesThisRead;
}
I tried debugging the code in InflatterInputStream library, there i could find that there is some issue with reading the last byte in the raw data stream. (keep buf size as 1 then error comes after last byte)
Here for this data file , size of the raw stream is 11005 wheras for decoded stream is 36963.
So how to fix such issues in which last byte is corrupt?