package org.prevayler.foundation.gzip; import org.prevayler.foundation.gzip.ContinuableGZIPInputStream; import java.io.EOFException; import java.io.IOException; import java.io.InputStream; public class MultiMemberGZIPInputStream extends InputStream { private ContinuableGZIPInputStream _gzip; public MultiMemberGZIPInputStream( InputStream stream) throws IOException { _gzip=new ContinuableGZIPInputStream(stream); } public int available() throws IOException { return _gzip.available(); } public int read() throws IOException { byte[] buf=new byte[1]; int n=read(buf); return n == -1 ? -1 : buf[0]; } public int read( byte b[]) throws IOException { return read(b,0,b.length); } public int read( byte b[], int off, int len) throws IOException { int n=_gzip.read(b,off,len); if (n == -1) { try { _gzip=new ContinuableGZIPInputStream(_gzip.remainingInput()); } catch ( EOFException e) { return -1; } return _gzip.read(b,off,len); } return n; } public void close() throws IOException { throw new UnsupportedOperationException(); } public void reset() throws IOException { throw new UnsupportedOperationException(); } public boolean markSupported(){ return false; } public void mark( int readlimit){ throw new UnsupportedOperationException(); } public long skip( long n) throws IOException { throw new UnsupportedOperationException(); } }