package org.rr.commons.io; import java.io.FilterInputStream; import java.io.IOException; import java.io.InputStream; /** * {@link FilterInputStream} that filters bytes. */ public class ByteFilterInputStream extends FilterInputStream { private final byte[] filterBytes; /** * @param in {@link InputStream} that should be filtered. * @param filterBytes The bytes which should be filtered. Each single byte in the array will match to the filter. */ public ByteFilterInputStream(final InputStream in, final byte[] filterBytes) { super(in); this.filterBytes = filterBytes; } @Override public int read(byte[] buf, int off, int len) throws IOException { int read = super.read(buf, off, len); int readResult = read; if(read > 0) { int o = 0; for(int i = 0 ; i < read; i++) { byte b = buf[i]; if(isFilter(b)) { readResult--; continue; } buf[o] = buf[i]; o++; } } return readResult; } private boolean isFilter(byte b) { for(byte filterbyte : filterBytes) { if(filterbyte == b) { return true; } } return false; } }