| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java: Общие вопросы > фильтрованные потоки |
| Автор: Sherst 29.4.2006, 23:56 | ||
| Привет всем! Такая строка нагоняет тоску :
Хотелось бы узнать зачем конструктору класса передавать так много объектов, какая нам от этого польза. Честно говоря не совсем понятно что происходит в той строке. |
| Автор: garm 30.4.2006, 07:46 |
| На самом деле конструктору класса ты передаёшь только один объект. Просто здесь этих конструкторов три штуки. Давай по порядку: Сначала ты создаешь поток, который берёт данные из файла(FileInputStream), соответственно указываешь имя этого файла. Потом ты создаёшь фильтрующий поток, обеспечивающий тебе буферизацию ввода и некоторые другие возможноси(BufferedInputStream), ему в конструктор передаётся тот поток, для которого нужно сделать буферизацию. И наконец ты создаёшь поток для чтения данных - DataInputStream. Он занимаеться тем, что полученные байты превращает в примитивные типы данных. Соответственно ему в конструктор передаётся поток, откуда эти байты брать. А польза нам от всего этого такая, что, во-первых, мы сможем читать не сырые байты, а сразу нужные числа. И, во-вторых, будет использоваться буферизация. |
| Автор: Sherst 30.4.2006, 10:43 | ||
| В таком случае получается что создается 3 потока: - файловый поток FileInputStream; - фильтрующий поток BufferedInputStream; - поток чтения данных DataInputStream; Выходит, что объект здесь один - класса DataInputStream ? Меня конечно смущает, что строка new FileInputStream("sd") не создает безымянный объект. Как-то это не понятно. Приведу примерный класс:
Разве в последней строке не создаются безымянные объекты типов T, F2 ? Никак не могу привыкнуть, что строка new ClassName() не создает никакого объекта |
| Автор: Sherst 30.4.2006, 11:57 | ||
И какой же ? |
| Автор: ALKS 30.4.2006, 12:08 |
| создаеться 3 объекта-потока, а не 3 потока. грубо говоря, ссылаясь друг на друга они в конце концов доходят до того единственного "на самом деле потока" FileInputStream который что-то делает. два остальных просто оберки, реализющие некоторый дополнительный функционал. Sherst, и вообще, а какая разница? ты все равнво может работать только с объектом потока на который у тебя ссылка есть остальные объекты для тебя не доступны. как только ты закроеш доступный для тебя объект, все объекты с ним связанные будут тоже закрыты и сборщик мусора их зачистит при ближайшем запуске. тебя собственно это заботить не должно. |
| Автор: LSD 30.4.2006, 12:12 |
| Тут будет 3 объекта которые расширяют InputStream, но только один из них будет связан с файловыми потоками ОС. Что считать потоком, а что нет, это вопрос терминологии. По мне так тут 3 потока. |
| Автор: Sherst 30.4.2006, 12:26 |
| Мне кажется такие тяжелые строки встречаются только при работе с потоками ... garm, ALKS, LSD спасибо за разъяснения. |