ingo@1025: /* ingo@1025: * Copyright (c) 2010 by Intevation GmbH ingo@1025: * ingo@1025: * This program is free software under the LGPL (>=v2.1) ingo@1025: * Read the file LGPL.txt coming with the software for details ingo@1025: * or visit http://www.gnu.org/licenses/ if it does not exist. ingo@1025: */ ingo@1025: ingo@1025: package de.intevation.gnv.util; ingo@1025: ingo@1025: import java.io.FilterInputStream; ingo@1025: import java.io.ByteArrayOutputStream; ingo@1025: import java.io.InputStream; ingo@1025: import java.io.IOException; ingo@1025: import java.io.UnsupportedEncodingException; ingo@1025: ingo@1025: /** ingo@1025: * @author Sascha Teichmann ingo@1025: */ ingo@1025: public class CaptureInputStream ingo@1025: extends FilterInputStream ingo@1025: { ingo@1025: protected ByteArrayOutputStream copy; ingo@1025: ingo@1025: public CaptureInputStream(InputStream in) { ingo@1025: super(in); ingo@1025: copy = new ByteArrayOutputStream(10*1024); ingo@1025: } ingo@1025: ingo@1025: public int read() throws IOException { ingo@1025: int x = in.read(); ingo@1025: if (x != -1) { ingo@1025: copy.write(x); ingo@1025: } ingo@1025: return x; ingo@1025: } ingo@1025: ingo@1025: public int read(byte [] b, int off, int len) throws IOException { ingo@1025: int r = in.read(b, off, len); ingo@1025: if (r > 0) { ingo@1025: copy.write(b, off, r); ingo@1025: } ingo@1025: return r; ingo@1025: } ingo@1025: ingo@1025: public long skip(long n) throws IOException { ingo@1025: long m = in.skip(n); ingo@1025: for (long i = m; i > 0L; --i) { // simulate gab ingo@1025: copy.write(0); ingo@1025: } ingo@1025: return m; ingo@1025: } ingo@1025: ingo@1025: public String copyToString() { ingo@1025: return copy.toString(); ingo@1025: } ingo@1025: ingo@1025: public String copyToString(String charsetName) ingo@1025: throws UnsupportedEncodingException ingo@1025: { ingo@1025: return copy.toString(charsetName); ingo@1025: } ingo@1025: ingo@1025: public byte [] toByteArray() { ingo@1025: return copy.toByteArray(); ingo@1025: } ingo@1025: ingo@1025: public void clear() { ingo@1025: copy.reset(); ingo@1025: } ingo@1025: }