Распределенные системы обработки информации

Поток ввода – объект, из которого можно считывать последовательность байтов или символов, определяется абстрактным классом InputStream (определяет метод int read(), читающий один байт). Поток вывода – объект, в который можно записывать последовательность байтов или символов, определяется абстрактным классом OutputString (определяет метод void write(int b), записывающий один байт). Методы read и

write могут блокировать поток. Есть и другие методы: int read(byte[] b), void write(byte[] b) и т.д.

Классы Reader и Writer аналогичны InputStream и OutputStream, но используются для Unicode-текстов.

Потоки ввода-вывода можно объединять в цепочки:

FileInputStream fin = new FileInputStream(“file.dat”);

DataInputStream din – new DataInputStream(fin);

double s = din.readDouble();

Консольный ввод-вывод осуществляется с помощью объектов System.in (типа InputStream) и System.out (типа PrintStream).

1.13 Форматированный ввод-вывод в Java (J2SE 1.5)

Класс Formatter – основа логики форматирования. Примеры опции форматирования - задание точности и ширины дробного числа (%7.4f), представлеие времени (%tT). Можно применять различные форматы для одного аргумента – в этом случае указываеться порядковый номер аргумента (%3$s для третьего). Общий вид параметра:

%[argument_index$][flags][width][.precision]conversion

Конструктору класса Formatter можно передать локаль желаемого языка. Само форматирование осуществляется методом format(). Подобно printf в него передается строка с шаблоном форматирования и аргументы. Можно использовать локаль, отличную от той, что использовалась в конструкторе:

public Formatter format(String format, Object . args)

public Formatter format(Locale l, String format, Object . args)

formatter.format("PI = %12.10f", Math.PI);

Классы PrintStream, PrintWriter позволяют перенаправить форматированный текст в поток. В стандартных потоках (System.out, System.err) есть методы, позволяющие сразу передавать в них форматированный текст. Кроме метода format() в классах, работающих с потоками, появляется printf(). Это синонимиы – ведут себя одинаково.

public PrintStream format(String format, Object . args)

public PrintStream format(Locale l, String format, Object . args)

System.out.format("Сегодня %1$tB %1$te, %1$tY.", Calendar.getInstance());

В классе String имеется метод format(). Работает так же, но возвращает String.

Можно использовать собственные объекты с Formatter – для этого применяется интерфейс Formattable. Реализовав метод formatTo() в своем классе, можно использовать класс в качестве аргумента при форматировании строк:

void formatTo(Formatter formatter, int flags, Integer width, Integer precision);

Класс Scanner – простой сканер, который может считывать простые типы и строки. Есть частичная поддержка регулярных выражений. Scanner разбивает ввод, используя образец разделителя (пробел по умолчанию). Из полученных лексем значения простых типов достаются nextХХХ() методами: nextBoolean(), nextFloat(),nextInt() и т.д. и т.п.

Scanner scanner = new Scanner(System.in);

int i = scanner.nextInt();

Методы hasNextXXX() (hasNextInt(), hasNextDouble(), …) проверяют – является ли очередная лексема значением указанного типа.

1.14 О программировании графики в Java

Сначала в Java появилась библиотека AWT (abstract window toolkit) (java.awt), которая использовала платформенно-зависимые средства для отображения элементов GUI. Позже появилась IFC (internet foundation classes), которая все элементы интерфейса рисовала в окне. Ее преемницей стала библиотека Swing (javax.swing), которая используется и сейчас. Swing не может работать самостоятельно, без опоры на AWT. Swing работает медленнее, чем AWT, но предоставляет более богатый набор средств, не зависит от платформы (меньше ошибок) и на всех платформах выглядит одинаково.

Окно верхнего уровня (не содержащееся внутри других окон) называется фреймом: классы Frame (AWT) и JFrame (Swing).

Отображать данные можно непосредственно на фрейме, но обычно он используется как контейнер для других GUI-компонентов. Фрейм состоит из нескольких слоев-областей (корневой области, область слоя, прозрачная область и область отображения). Компоненты размещаются на области отображения. Например, чтобы разместить компонент:

Container contentPane = frame.getContentPane();

Component c = …;

contentPane.add(c);

Для рисования на компоненте необходимо переопределить его метод void paintComponent(Graphics g). Graphics – набор настроек контекста для рисования. Метод paintComponent вызывается автоматически, когда требуется перерисовка компонента, но можно вызвать его принудительно с помощью метода repaint().

При обработке событий в библиотеке AWT события передаются от источников (например, кнопок) к обработчикам. Объект события – это объект подкласса java.util.EventObject, который несет в себе информацию о событии. Обработчик – это любой объект класса, реализующего специальный интерфейс.

Пример:

class MyListener implements ActionListener {

public void actionPerformed(ActionEvent event) {…}

}

ActionListener listener = new MyListener();

JButton button = new JButton(“OK”);

button.addActionListener(listener);

В качестве обработчиков часто используются вложенные классы.

1.15 Реализация технологии клиент-сервер на Java

Обмен данными между клиентом и сервером осуществляется посредством механизма сокетов. Для поключения к удаленному хосту используется класс Socket, конструктор которого принимает имя хоста и порт подключения. После подключения вызываются методы getInputStream() и getOutputStream() для получения входного и выходного потока сокета. Закрытие сокета осуществляет метод close().

Для создания сервера используется класс ServerSocket:

ServerSocket ss = new ServerSocket(1234); /* сокет для прослушивания порта */

Socket incoming = s.accept(); /* сокет для обмена данными с клиентом */

s.close();

Обычно сервер делают многопоточным с одним главным потоком, который принимает входящие соединения и распределяет их по потокам (например, с помощью блокирующих очередей).

Классы URL и URLConnection инкапсулируют подробности извлечения информации с удаленного узла.

URL url = new URL(“somehost”);

URLConnection con = url.openConnection();

// настроить подключение …

con.connect(); // запрос заголовка

// обработка полей заголовка …

InputStream is = con.getInputStream();

Для представления интернет-адресов используется класс java.net.InetAddress.

1.16 Апплеты в Java

Апплеты – это программы на Java, загружаемые с веб-сервера и выполняемые в браузере. Апплет представляет собой GUI-программу, написанную с помощью AWT и/или Swing с той разницей, что в данном случае программа запускается не из функции main, а путем создания объекта класса, унаследованного от класса Applet (JApplet). Applet является потомком класса Panel.

Страница:  1  2  3  4  5  6  7  8  9 


Другие рефераты на тему «Программирование, компьютеры и кибернетика»:

Поиск рефератов

Последние рефераты раздела

Copyright © 2010-2024 - www.refsru.com - рефераты, курсовые и дипломные работы