package at.gv.egovernment.moa.spss.util; import java.io.BufferedOutputStream; import java.io.IOException; import java.io.OutputStream; import java.math.BigDecimal; public class FilteredOutputStream extends BufferedOutputStream { private BigDecimal from = null; private BigDecimal to = null; private BigDecimal counter = new BigDecimal("0"); BigDecimal one = new BigDecimal("1"); public FilteredOutputStream(OutputStream innerStream, int bufferSize, BigDecimal from, BigDecimal to) { super(innerStream, bufferSize); this.from = from; this.to = to; } @Override public synchronized void write(int b) throws IOException { if(!inRange(counter)) { super.write(b); } counter = counter.add(one); } @Override public synchronized void write(byte[] b, int off, int len) throws IOException { this.filteredWrite(b, off, len); } @Override public synchronized void flush() throws IOException { super.flush(); } @Override public void write(byte[] b) throws IOException { if(b != null) { this.filteredWrite(b, 0, b.length); } } @Override public void close() throws IOException { super.close(); } private synchronized void filteredWrite(byte[] b, int off, int len) throws IOException { for(int i = 0; i < len; i++) { if(!inRange(counter)) { super.write(b[off+i]); } counter = counter.add(one); } } private boolean inRange(BigDecimal counter) { if ( (from == null) || (to == null)) return false; int compare = counter.compareTo(from); if (compare == -1) return false; else { compare = counter.compareTo(to); if (compare == 1) return false; else return true; } } }