![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| Sherst |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 131 Регистрация: 26.10.2005 Репутация: нет Всего: 2 |
Привет всем!
Такая строка нагоняет тоску :
Хотелось бы узнать зачем конструктору класса передавать так много объектов, какая нам от этого польза. Честно говоря не совсем понятно что происходит в той строке. |
|||
|
||||
| garm |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 39 Регистрация: 23.3.2006 Репутация: 2 Всего: 2 |
На самом деле конструктору класса ты передаёшь только один объект. Просто здесь этих конструкторов три штуки.
Давай по порядку: Сначала ты создаешь поток, который берёт данные из файла(FileInputStream), соответственно указываешь имя этого файла. Потом ты создаёшь фильтрующий поток, обеспечивающий тебе буферизацию ввода и некоторые другие возможноси(BufferedInputStream), ему в конструктор передаётся тот поток, для которого нужно сделать буферизацию. И наконец ты создаёшь поток для чтения данных - DataInputStream. Он занимаеться тем, что полученные байты превращает в примитивные типы данных. Соответственно ему в конструктор передаётся поток, откуда эти байты брать. А польза нам от всего этого такая, что, во-первых, мы сможем читать не сырые байты, а сразу нужные числа. И, во-вторых, будет использоваться буферизация. |
|||
|
||||
| Sherst |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 131 Регистрация: 26.10.2005 Репутация: нет Всего: 2 |
В таком случае получается что создается 3 потока:
- файловый поток FileInputStream; - фильтрующий поток BufferedInputStream; - поток чтения данных DataInputStream; Выходит, что объект здесь один - класса DataInputStream ? Меня конечно смущает, что строка new FileInputStream("sd") не создает безымянный объект. Как-то это не понятно. Приведу примерный класс:
Разве в последней строке не создаются безымянные объекты типов T, F2 ? Никак не могу привыкнуть, что строка new ClassName() не создает никакого объекта |
|||
|
||||
| garm |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 39 Регистрация: 23.3.2006 Репутация: 2 Всего: 2 |
Нет, поток здесь будет один. Объекта для чтения из него - три. Как я уже сказал, объекта будет три, но ссылка у нас останется только на один объект - класса DataInputStram. На два остальных объекта ссылки тоже будут, только нам они не доступны. Не совсем понял что есть безымянный объект. Объект, на который не указывает ни одна ссылка?
Создаются. Только существовать они будут до следующей сборки мусора.
На самом деле создаёт. Другой разговор, что new ClassName() возвращает ссылку на созданный объект, и, если её ничему не присвоить объект окажется недоступным. |
||||
|
|||||
| Sherst |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 131 Регистрация: 26.10.2005 Репутация: нет Всего: 2 |
И какой же ? |
|||
|
||||
| ALKS |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 354 Регистрация: 22.3.2006 Репутация: 1 Всего: 11 |
создаеться 3 объекта-потока, а не 3 потока. грубо говоря, ссылаясь друг на друга они в конце концов доходят до того единственного "на самом деле потока" FileInputStream который что-то делает. два остальных просто оберки, реализющие некоторый дополнительный функционал.
Sherst, и вообще, а какая разница? ты все равнво может работать только с объектом потока на который у тебя ссылка есть остальные объекты для тебя не доступны. как только ты закроеш доступный для тебя объект, все объекты с ним связанные будут тоже закрыты и сборщик мусора их зачистит при ближайшем запуске. тебя собственно это заботить не должно. |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Тут будет 3 объекта которые расширяют InputStream, но только один из них будет связан с файловыми потоками ОС. Что считать потоком, а что нет, это вопрос терминологии. По мне так тут 3 потока.
-------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| Sherst |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 131 Регистрация: 26.10.2005 Репутация: нет Всего: 2 |
Мне кажется такие тяжелые строки встречаются только при работе с потоками ...
garm, ALKS, LSD спасибо за разъяснения. |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |