// 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,v 1.3 2008-05-04 12:21:17 murkle * Exp $ */ 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; } @Override public int read() throws IOException { return (decompress) ? iis.read() : in.read(); } @Override 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); } }