JavaRush /Java блог /Архив info.javarush /FilterInputStreeam и FilterOutputStream
helllll
25 уровень

FilterInputStreeam и FilterOutputStream

Статья из группы Архив info.javarush
Господа, не могли бы вы объяснить дураку, как работают FilterInputStreeam и FilterOutputStream, и для чего они нужны? Желательно с примерами кода для каждого класса. Прочитал все, что было про них в Thinking Java + javadoc + google + Шилдт, но так толком и не понял. Зачем в них protected конструкторы?
Комментарии (2)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
vasiliy_urosov Уровень 31
10 мая 2014
В исходном коде этих классов делается только вызов методов объекта InputStream, который передаётся в конструкторе. Для чего нужны — ну, можно придумать что-то вроде: наследники этого класса будут, например, реализовывать шифр Цезаря. Или выполнять какую-нибудь [де]компрессию. И в программе своей мы запретим передавать данные в интернет или сохранять на диск, если они получены не от Filter-классов.
protected-конструкторы, на мой взгляд, полезны тем, что не позволяют создать объект, просто написав:
new FilterOutputStream();

Тебе придется сначала унаследоваться от этого класса, реализовать всё, что ты пожелаешь, и только потом, в единственном законченном классе-потомке расширить видимость конструктора до public.
Например, наследуешься от FilterInputStream, переопределяешь методы read, реализуя щифр Цезаря. Потом наследуешься от цезарева класса, и переопределяешь ещё методы: available, read, skip… Например, реализуя шифрование base64. И только у этого класса делаешь public-конструктор. В любом месте хватит всего-то проверки на то, является ли класс, с которого ты читаешь, объектом типа FilterInputStream или нет.