Полагаю, вы говорите о java.io.Filter * (например, FilterInputStream).
Если мы говорим о классе FilterInputStream, то это просто оболочка для InputStream, которая ничего не делает. Каждый вызов метода Filter будет просто вызывать соответствующий метод в упакованном InputStream. В одиночку это совершенно бесполезно.
Представьте, что вам нужен InputStream, который преобразует каждый символ "a" в "b". Вы можете расширить FilterInputStream и переопределить методы read ():
// this code has not been tested
class ABFilter extends FilterInputStream {
public ABFilter (InputStream in) {
super(in);
}
@Override
public int read() {
int character = super.read();
if (character == 97)
return 98;
return character;
}
// similarly implement all other "read()" methods
}
Теперь вы можете использовать этот поток для переноса любого существующего потока:
InputStream streamWithA = ...;
InputStream streamWithoutA = new ABFilter(streamWithA);