Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как расшифровывается java.io? 
:(
    Опции темы
Syltan
Дата 19.5.2010, 18:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 301
Регистрация: 31.8.2009

Репутация: нет
Всего: -2



Вот есть код.
Код


package hlp;
public class HLP {
final private static int N = 50;
    final private static java.io.BufferedReader jin =
        new java.io.BufferedReader(new java.io.InputStreamReader(System.in));
    private static double min_rad(double x[], double y[], int n)  {
        double min = 0;
        double temp;
        int i;
        for (i = 0; i < n; i++)
            if ((temp = Math.sqrt(x[i] * x[i] + y[i] * y[i])) > min)
                min = temp;

        return min;
    }
    public static void main(String[] args) throws java.io.IOException {
        int n;
        double x[] = new double[N],
               y[] = new double[N];
        double radius;
        int i;

        System.out.print("Input n: ");
        n = Integer.parseInt(jin.readLine());

        for (i = 0; i < n; i++)
        {
         System.out.print("Input x[" + i + "]: ");
         x[i] = Double.parseDouble(jin.readLine());
            System.out.print("Input y[" + i + "]: ");
            y[i] = Double.parseDouble(jin.readLine());
        }

        radius = min_rad(x, y, n);

        System.out.print("Minimum radius: " + radius);
    }

}


Объясниите мне пожалуйста вот этот кусок
Код

final private static java.io.BufferedReader jin =
        new java.io.BufferedReader(new java.io.InputStreamReader(System.in));
    private static double min_rad(double x[], double y[], int n)  {

Очень что-то не могу понять, особенно выражение типа?
Код

new java.io.BufferedReader(new java.io.InputStreamReader(System.in));

Что-то совсем не ясно ,что здесь происходит, что означает в кобках вот это
Код
new java.io.InputStreamReader(System.in));

PM MAIL   Вверх
soulcub
Дата 19.5.2010, 21:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 130
Регистрация: 2.2.2010
Где: Винница, Украина

Репутация: нет
Всего: 2



Это приём в Java, когда нам не нужен объект в дальнейшем, а нужен только 1 раз. В данном случае
Код

new java.io.InputStreamReader(System.in));

мы создаем поток чтения данных из системы(клавиатуры) и передаём его в конструктор класса BufferedReader для дальнейшей работы с ним.
Вообще это сложный пример для понимания, если видишь Java впервые в жизни.. Начните с "Hello world"..
--------------------
Так давай же, поспеши!Отыскать СВОЙ куб души!
PM MAIL ICQ   Вверх
kemiisto
Дата 19.5.2010, 21:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



Профиль
Группа: Участник Клуба
Сообщений: 3292
Регистрация: 29.7.2007

Репутация: 5
Всего: 160



Цитата(soulcub @  19.5.2010,  22:33 Найти цитируемый пост)
Это приём в Java, когда нам не нужен объект в дальнейшем, а нужен только 1 раз.

 smile Объяснил! smile 

Syltan, это пример использования паттерна (шаблона) проектирования Декоратор, Decorator в Java API. smile Экземпляр класса BufferedReader - декоратор экземпляра класса Reader. А Reader - вершина иерархии туевой хучи различных классов-читалок. Короче, рановато ты полез в такие дебри...


--------------------
PM MAIL WWW GTalk Jabber   Вверх
soulcub
Дата 20.5.2010, 06:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 130
Регистрация: 2.2.2010
Где: Винница, Украина

Репутация: нет
Всего: 2



smile  Ну, а ты думаешь с твоих слов он понял больше?  smile 
--------------------
Так давай же, поспеши!Отыскать СВОЙ куб души!
PM MAIL ICQ   Вверх
jk1
Дата 20.5.2010, 10:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1168
Регистрация: 17.10.2008
Где: Санкт-Петербург

Репутация: 40
Всего: 75



Цитата

Это приём в Java, когда нам не нужен объект в дальнейшем, а нужен только 1 раз.

soulcub,  это совсем не так. Использовано всего-навсего обращение к классу по полному имени вместо использования import. Разницы с точки зрения JVM нет никакой, импорты сами по себе ничего не подгружают и не выполняют. Класс будет загружен JVM только по факту использования, например при создании нового объекта.

Syltan, разберемся по порядку.  
Код

new java.io.InputStreamReader(System.in));

Тут мы взяли стандартный поток ввода вашего приложения и обернули его в символьный поток, то есть создали прослойку позволяющую читать символы в дефолтной кодировке вашей системы, а не голые байты. Как справедливо заметил kemiisto, этот прием называется шаблоном проектирования Decorator. Теперь добавим еще одну прослойку
Код

new java.io.BufferedReader(new java.io.InputStreamReader(System.in));

которая позволит читать не из самого потока, а из буфера. Как только вычитаем весь буфер, он будет заполнен заново из потока. Для чего это нужно? Чтение из самого потока связано с вызовом native-методов и является в общем случае дорогой и медленной операцией, её невыгодно дергать для посимвольного чтения. Наличие буфера позволяет минимизировать количество вызовов платформенно-специфичного API, и таким образом повысить производительность.
Общности ради замечу, что подобная техника применяется не только при чтении из потока, но и при записи в него. 


--------------------
Opinions are like assholes — everybody has one
PM MAIL   Вверх
duk
Дата 23.5.2010, 01:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Some Object
*


Профиль
Группа: Участник
Сообщений: 179
Регистрация: 19.7.2007

Репутация: 4
Всего: 4



kemiisto, 
Цитата(kemiisto @  19.5.2010,  21:51 Найти цитируемый пост)
Syltan, это пример использования паттерна (шаблона) проектирования Декоратор, Decorator в Java API. smile Экземпляр класса BufferedReader - декоратор экземпляра класса Reader. А Reader - вершина иерархии туевой хучи различных классов-читалок. Короче, рановато ты полез в такие дебри... 


Как по мне, то это в большей мере Интерпретатор, а не Декторатор. 
PM MAIL   Вверх
kemiisto
Дата 23.5.2010, 10:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



Профиль
Группа: Участник Клуба
Сообщений: 3292
Регистрация: 29.7.2007

Репутация: 5
Всего: 160



Цитата(duk @  23.5.2010,  02:25 Найти цитируемый пост)
Как по мне, то это в большей мере Интерпретатор, а не Декторатор.

duk, в каком месте? smile 


--------------------
PM MAIL WWW GTalk Jabber   Вверх
duk
Дата 23.5.2010, 12:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Some Object
*


Профиль
Группа: Участник
Сообщений: 179
Регистрация: 19.7.2007

Репутация: 4
Всего: 4



kemiisto, например мы что-то хотим записать в файл (числа, строки, ...). В любом случае, это все интерпретируется на байтовый уровень. Тоже само касается и чтения. Читаем байты, и в зависимости от того, что мы хотим получить на выходе, то и используем.

По поводу Декоратора -- я не отрицал использование этого шаблона. Делегирования вызовов методов там происходят.

Про место, где используется: точку в коде показать? )  Все потоки  имеют общего предка (я чет изначально подумал, что речь шла о потоках, а не о ридерах; но суть тут та же), соответственно в подкалассах есть все базовые методы, которые могут вызываться в других классах. К примеру один экземпляр потока передается в конструктор другого, и там уже вызывается - вот тут реализован шаблон Декоратор. Но в тоже время, оба экземпляра  потоков могу работать только с теми данными, для работы с которыми они предназначены. Вызывая методы переданного объекта IO и получая какие-то данные, они интерпретирутся объектом, в конструктор класса которого, было что-то передано и отдаются пользователю.  Тут работает шаблон Интерпретатор, который априори включает в себя часть Декоратора.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0554 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.