Распределенные системы обработки информации
Поток ввода – объект, из которого можно считывать последовательность байтов или символов, определяется абстрактным классом 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.
Другие рефераты на тему «Программирование, компьютеры и кибернетика»:
Поиск рефератов
Последние рефераты раздела
- Основные этапы объектно-ориентированного проектирования
- Основные структуры языка Java
- Основные принципы разработки графического пользовательского интерфейса
- Основы дискретной математики
- Программное обеспечение системы принятия решений адаптивного робота
- Программное обеспечение
- Проблемы сохранности информации в процессе предпринимательской деятельности