I need to download gzipped data chunkwise and append it to file. The problem is that when i read from the HTTP conn, it is not sending total compressed byte array at a single time(stream). my Application is looking for Gzip header in the left over bytes of the byte array sent before. how can i force the http to send the compressed instance of the byte array all at once. Here's my code snippet that takes the data compresses it and adds it to a file.
if (responseCode == HttpConnection.HTTP_OK)
{
boolean stop = false, pause = false;
totalSize = conn.getLength() + downloaded;
chunkSize = (int)(conn.getLength() / 100);
System.out.println("*********-----" + conn.getLength() + "");
System.out.println("-----------------ok");
in = conn.openInputStream();
int length = 0, s = 0;
byte[] readBlock = new byte[(int)conn.getLength()];
while ((s = in.read(readBlock) != -1)
length = length + s;
{
if (!pause)
{
readBlock = Decompress.decompress(readBlock);
out.write(readBlock, 0, length);
downloaded += length;
int a = getPerComplete(totalSize, downloaded);
System.out.println("% OF Downloaded--------" + a);
int a1 = getPerComplete(totalSize, downloaded);
Decompress function:-
public byte[] decompress(byte[] compressed) throws IOException
{
GZIPInputStream gzipInputStream;
if (compressed.length > 4)
{
gzipInputStream = new GZIPInputStream(
new ByteArrayInputStream(compressed, 4,
compressed.length - 4));
ByteArrayOutputStream baos = new ByteArrayOutputStream();
for (int value = 0; value != -1;)
{
value = gzipInputStream.read();
if (value != -1)
{
baos.write(value);
}
}
gzipInputStream.close();
baos.close();
return baos.toByteArray();
}
else
{
return null;
}
}
}