![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| Syltan |
|
||||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 301 Регистрация: 31.8.2009 Репутация: нет Всего: -2 |
Вот есть код.
Объясниите мне пожалуйста вот этот кусок
Очень что-то не могу понять, особенно выражение типа?
Что-то совсем не ясно ,что здесь происходит, что означает в кобках вот это
|
||||||||
|
|||||||||
| soulcub |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 130 Регистрация: 2.2.2010 Где: Винница, Украина Репутация: нет Всего: 2 |
Это приём в Java, когда нам не нужен объект в дальнейшем, а нужен только 1 раз. В данном случае
мы создаем поток чтения данных из системы(клавиатуры) и передаём его в конструктор класса BufferedReader для дальнейшей работы с ним. Вообще это сложный пример для понимания, если видишь Java впервые в жизни.. Начните с "Hello world".. --------------------
Так давай же, поспеши!Отыскать СВОЙ куб души! |
|||
|
||||
| kemiisto |
|
|||
![]() Дикий Кот. =^.^= ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Участник Клуба Сообщений: 3292 Регистрация: 29.7.2007 Репутация: 5 Всего: 160 |
Syltan, это пример использования паттерна (шаблона) проектирования Декоратор, Decorator в Java API. -------------------- |
|||
|
||||
| soulcub |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 130 Регистрация: 2.2.2010 Где: Винница, Украина Репутация: нет Всего: 2 |
--------------------
Так давай же, поспеши!Отыскать СВОЙ куб души! |
|||
|
||||
| jk1 |
|
||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1168 Регистрация: 17.10.2008 Где: Санкт-Петербург Репутация: 40 Всего: 75 |
soulcub, это совсем не так. Использовано всего-навсего обращение к классу по полному имени вместо использования import. Разницы с точки зрения JVM нет никакой, импорты сами по себе ничего не подгружают и не выполняют. Класс будет загружен JVM только по факту использования, например при создании нового объекта. Syltan, разберемся по порядку.
Тут мы взяли стандартный поток ввода вашего приложения и обернули его в символьный поток, то есть создали прослойку позволяющую читать символы в дефолтной кодировке вашей системы, а не голые байты. Как справедливо заметил kemiisto, этот прием называется шаблоном проектирования Decorator. Теперь добавим еще одну прослойку
которая позволит читать не из самого потока, а из буфера. Как только вычитаем весь буфер, он будет заполнен заново из потока. Для чего это нужно? Чтение из самого потока связано с вызовом native-методов и является в общем случае дорогой и медленной операцией, её невыгодно дергать для посимвольного чтения. Наличие буфера позволяет минимизировать количество вызовов платформенно-специфичного API, и таким образом повысить производительность. Общности ради замечу, что подобная техника применяется не только при чтении из потока, но и при записи в него. -------------------- Opinions are like assholes — everybody has one |
||||||
|
|||||||
| duk |
|
|||
![]() Some Object ![]() Профиль Группа: Участник Сообщений: 179 Регистрация: 19.7.2007 Репутация: 4 Всего: 4 |
kemiisto,
Как по мне, то это в большей мере Интерпретатор, а не Декторатор. |
|||
|
||||
| kemiisto |
|
|||
![]() Дикий Кот. =^.^= ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Участник Клуба Сообщений: 3292 Регистрация: 29.7.2007 Репутация: 5 Всего: 160 |
duk, в каком месте? -------------------- |
|||
|
||||
| duk |
|
|||
![]() Some Object ![]() Профиль Группа: Участник Сообщений: 179 Регистрация: 19.7.2007 Репутация: 4 Всего: 4 |
kemiisto, например мы что-то хотим записать в файл (числа, строки, ...). В любом случае, это все интерпретируется на байтовый уровень. Тоже само касается и чтения. Читаем байты, и в зависимости от того, что мы хотим получить на выходе, то и используем.
По поводу Декоратора -- я не отрицал использование этого шаблона. Делегирования вызовов методов там происходят. Про место, где используется: точку в коде показать? ) Все потоки имеют общего предка (я чет изначально подумал, что речь шла о потоках, а не о ридерах; но суть тут та же), соответственно в подкалассах есть все базовые методы, которые могут вызываться в других классах. К примеру один экземпляр потока передается в конструктор другого, и там уже вызывается - вот тут реализован шаблон Декоратор. Но в тоже время, оба экземпляра потоков могу работать только с теми данными, для работы с которыми они предназначены. Вызывая методы переданного объекта IO и получая какие-то данные, они интерпретирутся объектом, в конструктор класса которого, было что-то передано и отдаются пользователю. Тут работает шаблон Интерпретатор, который априори включает в себя часть Декоратора. |
|||
|
||||
![]()
|
| Правила форума "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. |