// Copyright 2001, FreeHEP.
package org.freehep.util.io;
import java.io.IOException;
import java.io.InputStream;
import java.util.zip.InflaterInputStream;
/**
* Special stream that can be used to read uncompressed first and compressed
* from a certain byte.
*
* IMPORTANT: inherits from InputStream rather than FilterInputStream so that
* the correct read(byte[], int, int) method is used.
*
* @author Mark Donszelmann
* @version $Id: DecompressableInputStream.java 8584 2006-08-10 23:06:37Z duns $
*/
public class DecompressableInputStream extends InputStream {
private boolean decompress;
private InflaterInputStream iis;
private InputStream in;
/**
* Creates a Decompressable input stream from given stream.
*
* @param input stream to read from.
*/
public DecompressableInputStream(InputStream input) {
super();
in = input;
decompress = false;
}
public int read() throws IOException {
return (decompress) ? iis.read() : in.read();
}
public long skip(long n) throws IOException {
return (decompress) ? iis.skip(n) : in.skip(n);
}
/**
* Start reading in compressed mode from the next byte.
*
* @throws IOException if read fails.
*/
public void startDecompressing() throws IOException {
decompress = true;
iis = new InflaterInputStream(in);
}
}