SlideShare a Scribd company logo
Углубленное
программирование
на Java
Лекция 6
«Утилиты»
Виталий Чибриков
Схема сервера
main

frontend

gameMechanics

messageSystem

base

dbService

resourceSystem

utils
2
План лекции
1. Singleton и Context
2. Exception и Throwable
3. Events и Callbacks
4. Анонимные классы

5. Random
6. Time и Date

7. I/O streams
8. VFS
3
Singleton
Позволяет создать только один объект данного типа на процесс
Аналог статического поля, с «отложенной» инициализацией

Singleton
Содержит приватное статическое поле типа своего же класса (instance)
Приватный конструктор
Статический метод instance() который возвращает instance класса

4
Singleton

5
Context
Обертка над картой
Хранит сылки на объекты по ключу – классу объекта

Map<класс, объект этого класа>
1. Проверяет, что служба в единственном экземпляре,
даже если служба не singleton
2. Содержит ссылки на множество служб,
которые могут понадобиться методам объектов процесса
3. Позволяет создать только те объекты, которые нужны процессу
4. Список нужных служб можно хранить в конфиге

6
Context

7
План лекции
1. Singleton и Context
2. Exception и Throwable
3. Events и Callbacks
4. Анонимные классы

5. Random
6. Time и Date

7. I/O streams
8. VFS
8
Задачи исключений
«второй» способ выхода из функции
возможность вернуть код ошибки

«проброс» данных через call stack
уведомление вызывающей стороны о не корректных данных

уведомление о состоянии которое код не может исправить

9
Пример
Рассмотрим функцию чтения id по имени из базы
public Integer getId(String name){…}

Варианты результата вызова функции:
значение
null

exception

10
Throwable

11
Наследование

12
Exception
public class Exception extends Throwable
public Exception()
public Exception(String message)
public Exception(String message, Throwable cause)
public Exception(Throwable cause)

public class GMException extends Exception
public GMException(){…}
public GMException(String message, Throwable cause){
super(message, cause)
…
}
13
Пример использвания

14
План лекции
1. Singleton и Context
2. Exception и Throwable
3. Events и Callbacks
4. Анонимные классы

5. Random
6. Time и Date

7. I/O streams
8. VFS
15
Events
Задача
Служба в которой происходят некоторые события – EventSource
Службы которые должны реагировать на эти события – EventListeners

Нужен механизм оповещения о событии и передачи инфорации об источнике

Реализация
EventSource
EventListenerInterface
EventListenerImpl

16
Pattern Observer

17
Event listener

18
Event source

19
Примеры подписок
Старт сервера
События игрового мира

Вход/выход пользователя на карту
Наступление определенного момента времени

20
Callback
Задача
Вы используете внешнюю библиотеку
Событие во внешней библиотеке должно повлиять на ваш код

Ваш метод который будет вызван по событию – callback

Реализация
Вы должны передать в библиотеку свой метод
С++: ссылка на функцию
С#: делегаты
Java: вы передаете объект реализующий библиотечный интерфейс

21
Callback
Пример:

22
План лекции
1. Singleton и Context
2. Exception и Throwable
3. Events и Callbacks
4. Анонимные классы

5. Random
6. Time и Date

7. I/O streams
8. VFS
23
Анонимные классы
Если вы передаете в метод новый объект класса по интерфейсу,
не обязательно создавать отдельный класс.
Явное создание класса

24
Анонимные классы
Анонимный класс

Точно также можно создать анонимный наследник абстрактного класса
25
План лекции
1. Singleton и Context
2. Exception и Throwable
3. Events и Callbacks
4. Анонимные классы

5. Random
6. Time и Date

7. I/O streams
8. VFS
26
Random
Нет понятия случайного числа
Есть последовательности чисел с заданным распределением

Pseudorandom number generator — алгоритм, порождающий
последовательность чисел, элементы которой почти
независимы друг от друга и подчиняются заданному распределению

27
Алгоритм случайности
java.util.Random
Linear Congruential Pseudorandom Number Generator (See
Donald Knuth, The Art of Computer Programming, Volume 3,
Section 3.2.1.)
modulus
multiplier
increment
seed

28
Random in java
Random rnd = new Random();
rnd.nextInt(100); – вернет случайное число от 0 до 99
При каждом запуске последовательность будет новой
Random rnd = new Random(1L);
rnd.nextInt(100); – вернет случайное число от 0 до 99
При каждом запуске последовательность будет прежней
Math.random(); – вернет случайное число типа double
от 0 до 1
При каждом запуске последовательность будет новой

29
Субъективная случайность
…Sid Meier found that if a player lost too many 2-to-1 battles in a
row, they would get frustrated. Instead of risking a player shutting
the game down, Sid changed the math :o)
Видео (Sid Meier GDC 2010):
http://www.youtube.com/watch?v=bY7aRJE-oOY

30
План лекции
1. Singleton и Context
2. Exception и Throwable
3. Events и Callbacks
4. Анонимные классы

5. Random
6. Time и Date

7. I/O streams
8. VFS
31
Time & Date
Работа со временем
От миллисекунд до даты
UNIX или POSIX time – время с 1 января 1970 в секундах

Фарматирование даты и времени для пользователей
Как хранить время в приложении и в базе
Подписка на таймер

Работу со временем лучше перенести в TimeHelper
32
TimeHelper

33
Timer
java.unil.Timer

java.unil.TimerTask
Порядок работы:
Создаем timer
Создаем класс унаследованный от TimerTask

Пишем в методе run() код, который будет выполнен по таймеру
Передаем в timer таск и время, через которое надо выполнить таск
Ждем положенное время

PROFIT!!!
Выключаем timer через timer.cancel();
34
Timer

35
План лекции
1. Singleton и Context
2. Exception и Throwable
3. Events и Callbacks
4. Анонимные классы

5. Random
6. Time и Date

7. I/O streams
8. VFS
36
I/O, потоки
I/O ― общение с внешними устройствами (файлы, принтеры, сеть и т.д.)
Поток ― объект который представляет источник или приемник данных
Поток основан на последовательности битов данных

InputStream

OutputStream
37
InputStream
public abstract class InputStream
Основные методы:
abstract int read()
int read(byte[] b)
void mark(int readlimit)

void reset()
void close()

Основная задача ― читать байт за байтом из входного потока
38
Byte Streams
FileOutputStream
OutputStream

FilterOutputStream

PrintStream

BufferedOutputStream
DataOutputStream

FileInputStream
InputStream

BufferedInputStream
FilterInputStream

DataInputStream
39
FilterInputStream
Decorator pattern

Переопределяет все методы InputStream вызывая методы поля in
Наследники этого класса могут менять работу потока в поле in
40
Decorator

41
Decorator
Рассмотрим сериализованные java объекты, которые лежат в gzip
архиве и которые мы хотим быстро прочесть.
Для начала откроем inputstream для файла:
FileInputStream fis = new FileInputStream("/objects.gz");
Читать побитово для нас слишком долго -- буферизуем чтение:
BufferedInputStream bis = new BufferedInputStream(fis);
Файл зазипован -- нам надо его разархивировать:
GzipInputStream gis = new GzipInputStream(bis);
Теперь десиериализуем java объекты:
ObjectInputStream ois = new ObjectInputStream(gis);
И, наконец, прочитаем:
SomeObject someObject = (SomeObject) ois.readObject();
42
Character Streams

43
SimpleFileReader

44
CustomFileReader

45
Закрытие потоков
Для особождения ресурсов все потоки должны быть закрыты
BufferedReader br = null;
try{
//code
br = new BufferedReader(isr);
//code
} catch (Exception e){
System.err.println("Error: " + e.getMessage());
} finally {
if(br != null){
try {
br.close();
} catch (IOException e) {
System.err.println("Error: " + e.getMessage());
}
}
}
46
File
File ― представление пути к файлу или директории
Скрывает от приложения детали пути к файлу конкретной ОС

Основные методы
boolean exists();

String getAbsolutePath();
boolean isDirectory();
boolean createNewFile();
boolean mkdir();
boolean delete();
boolean deleteOnExit();
47
План лекции
1. Singleton и Context
2. Exception и Throwable
3. Events и Callbacks
4. Анонимные классы

5. Random
6. Time и Date

7. I/O streams
8. VFS
48
VFS
Virtual File System ― модуль для работы с файлами

49
VFS

50
Iterator<String>

51
Спасибо за внимание
Виталий Чибриков
chibrikov@corp.mail.ru

More Related Content

What's hot (20)

PDF
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++
Sergey Platonov
 
PPTX
Async clinic by by Sergey Teplyakov
Alex Tumanoff
 
PPTX
Александр Фокин, Рефлексия в C++
Sergey Platonov
 
PDF
Практика Lock-free. RealTime-сервер
Platonov Sergey
 
PDF
C++ CoreHard Autumn 2018. Полезный constexpr - Антон Полухин
corehard_by
 
PPTX
Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...
Yandex
 
PPTX
Некоторые паттерны реализации полиморфного поведения в C++ – Дмитрий Леванов,...
Yandex
 
PDF
Полухин Антон, Как делать не надо: C++ велосипедостроение для профессионалов
Sergey Platonov
 
PDF
Алексей Куканов — Параллелизм в C++: управляйте приложением, а не потоками!
Yandex
 
PDF
Лекция 8: Многопоточное программирование: Intel Threading Building Blocks
Mikhail Kurnosov
 
PPTX
FreeRTOS
quakke
 
PDF
Шишки, набитые за 15 лет использования акторов в C++
Yauheni Akhotnikau
 
PDF
Модель памяти C++ - Андрей Янковский, Яндекс
Yandex
 
PPTX
разработка серверов и серверных приложений лекция №2
Eugeniy Tyumentcev
 
PPTX
разработка серверов и серверных приложений лекция №3
Eugeniy Tyumentcev
 
PPTX
200 open source проектов спустя: опыт статического анализа исходного кода
Andrey Karpov
 
PDF
Память в Java. Garbage Collector
Olexandra Dmytrenko
 
PDF
Parallel STL
Evgeny Krutko
 
PDF
Thread
Alexander Rusin
 
PDF
Борис Сазонов, RAII потоки и CancellationToken в C++
Sergey Platonov
 
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++
Sergey Platonov
 
Async clinic by by Sergey Teplyakov
Alex Tumanoff
 
Александр Фокин, Рефлексия в C++
Sergey Platonov
 
Практика Lock-free. RealTime-сервер
Platonov Sergey
 
C++ CoreHard Autumn 2018. Полезный constexpr - Антон Полухин
corehard_by
 
Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...
Yandex
 
Некоторые паттерны реализации полиморфного поведения в C++ – Дмитрий Леванов,...
Yandex
 
Полухин Антон, Как делать не надо: C++ велосипедостроение для профессионалов
Sergey Platonov
 
Алексей Куканов — Параллелизм в C++: управляйте приложением, а не потоками!
Yandex
 
Лекция 8: Многопоточное программирование: Intel Threading Building Blocks
Mikhail Kurnosov
 
FreeRTOS
quakke
 
Шишки, набитые за 15 лет использования акторов в C++
Yauheni Akhotnikau
 
Модель памяти C++ - Андрей Янковский, Яндекс
Yandex
 
разработка серверов и серверных приложений лекция №2
Eugeniy Tyumentcev
 
разработка серверов и серверных приложений лекция №3
Eugeniy Tyumentcev
 
200 open source проектов спустя: опыт статического анализа исходного кода
Andrey Karpov
 
Память в Java. Garbage Collector
Olexandra Dmytrenko
 
Parallel STL
Evgeny Krutko
 
Борис Сазонов, RAII потоки и CancellationToken в C++
Sergey Platonov
 

Viewers also liked (12)

PPTX
СУБД 2013 Лекция №9 "Безопасность баз данных"
Technopark
 
PDF
Лекция 13. YARN
Technopark
 
PDF
Лекция 11. Вычислительная модель Pregel
Technopark
 
PPT
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...
Technopark
 
PDF
Java осень 2014 занятие 8
Technopark
 
PDF
Java весна 2014 лекция 1
Technopark
 
PDF
Java весна 2014 лекция 2
Technopark
 
PPTX
СУБД 2013 Лекция №5 "Определение узких мест"
Technopark
 
PDF
Алгоритмы и структуры данных осень 2013 лекция 5
Technopark
 
PPTX
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
Technopark
 
PDF
Java осень 2014 занятие 1
Technopark
 
PDF
Лекция 14. Hadoop в Поиске Mail.Ru
Technopark
 
СУБД 2013 Лекция №9 "Безопасность баз данных"
Technopark
 
Лекция 13. YARN
Technopark
 
Лекция 11. Вычислительная модель Pregel
Technopark
 
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...
Technopark
 
Java осень 2014 занятие 8
Technopark
 
Java весна 2014 лекция 1
Technopark
 
Java весна 2014 лекция 2
Technopark
 
СУБД 2013 Лекция №5 "Определение узких мест"
Technopark
 
Алгоритмы и структуры данных осень 2013 лекция 5
Technopark
 
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
Technopark
 
Java осень 2014 занятие 1
Technopark
 
Лекция 14. Hadoop в Поиске Mail.Ru
Technopark
 
Ad

Similar to Java осень 2013 лекция 6 (20)

PDF
Java осень 2014 занятие 6
Technopark
 
PDF
Java осень 2014 занятие 5
Technopark
 
PPT
Лекция 6
itc73
 
PDF
Java 9: what is there beyond modularization
Ivan Krylov
 
PPT
Java. Lecture 06. I/O
colriot
 
PPTX
C# Deep Dive
LuxoftTraining
 
PPTX
C sharp deep dive
Sergey Teplyakov
 
PDF
Java осень 2013 лекция 2
Technopark
 
PPT
06 Ввод-вывод
phearnot
 
PDF
андрей паньгин
kuchinskaya
 
PDF
Архитектура в Agile: слабая связность
Andrey Bibichev
 
PDF
20100228 virtualization igotti_lecture03
Computer Science Club
 
PPT
Java. Работа с файловой системой. Потоки ввода-вывода.
Unguryan Vitaliy
 
PPT
Msu.Center.Lectures.J06 Io
olegol
 
PDF
Java tricks for high-load server programming
Andrei Pangin
 
PDF
Глава 2: Среда разработки NetBeans
metaform
 
PPT
Java. Lecture 03. OOP and UML
colriot
 
PPTX
Step 1
DmitryTrushkin
 
PDF
Выжимаем из сервера максимум (Андрей Паньгин)
Ontico
 
PPTX
Stream API: рекомендации лучших собаководов
tvaleev
 
Java осень 2014 занятие 6
Technopark
 
Java осень 2014 занятие 5
Technopark
 
Лекция 6
itc73
 
Java 9: what is there beyond modularization
Ivan Krylov
 
Java. Lecture 06. I/O
colriot
 
C# Deep Dive
LuxoftTraining
 
C sharp deep dive
Sergey Teplyakov
 
Java осень 2013 лекция 2
Technopark
 
06 Ввод-вывод
phearnot
 
андрей паньгин
kuchinskaya
 
Архитектура в Agile: слабая связность
Andrey Bibichev
 
20100228 virtualization igotti_lecture03
Computer Science Club
 
Java. Работа с файловой системой. Потоки ввода-вывода.
Unguryan Vitaliy
 
Msu.Center.Lectures.J06 Io
olegol
 
Java tricks for high-load server programming
Andrei Pangin
 
Глава 2: Среда разработки NetBeans
metaform
 
Java. Lecture 03. OOP and UML
colriot
 
Выжимаем из сервера максимум (Андрей Паньгин)
Ontico
 
Stream API: рекомендации лучших собаководов
tvaleev
 
Ad

More from Technopark (19)

PDF
Лекция 12. Spark
Technopark
 
PDF
Лекция 10. Apache Mahout
Technopark
 
PDF
Лекция 9. ZooKeeper
Technopark
 
PDF
Лекция 7. Введение в Pig и Hive
Technopark
 
PDF
Лекция 6. MapReduce в Hadoop (графы)
Technopark
 
PDF
Лекция 5. MapReduce в Hadoop (алгоритмы)
Technopark
 
PDF
Лекция 4. MapReduce в Hadoop (введение)
Technopark
 
PDF
Лекция 3. Распределённая файловая система HDFS
Technopark
 
PDF
Лекция 2. Основы Hadoop
Technopark
 
PDF
Лекция 1. Введение в Big Data и MapReduce
Technopark
 
PPTX
СУБД 2013 Лекция №8 "Конфигурирование базы данных"
Technopark
 
PPTX
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
Technopark
 
PPTX
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...
Technopark
 
PPTX
СУБД 2013 Лекция №4 "Расширенные возможности работы с базами данных. Триггеры...
Technopark
 
PPTX
СУБД 2013 Лекция №3 "Выборка данных (продолжение). Транзакции"
Technopark
 
PPTX
СУБД 2013 Лекция №2 "Модификация данных. Выборка данных (начало)"
Technopark
 
PPTX
СУБД 2013 Лекция №1 "Введение и начало проектирования"
Technopark
 
PDF
Java осень 2014 занятие 7
Technopark
 
PDF
Java осень 2014 занятие 3
Technopark
 
Лекция 12. Spark
Technopark
 
Лекция 10. Apache Mahout
Technopark
 
Лекция 9. ZooKeeper
Technopark
 
Лекция 7. Введение в Pig и Hive
Technopark
 
Лекция 6. MapReduce в Hadoop (графы)
Technopark
 
Лекция 5. MapReduce в Hadoop (алгоритмы)
Technopark
 
Лекция 4. MapReduce в Hadoop (введение)
Technopark
 
Лекция 3. Распределённая файловая система HDFS
Technopark
 
Лекция 2. Основы Hadoop
Technopark
 
Лекция 1. Введение в Big Data и MapReduce
Technopark
 
СУБД 2013 Лекция №8 "Конфигурирование базы данных"
Technopark
 
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
Technopark
 
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...
Technopark
 
СУБД 2013 Лекция №4 "Расширенные возможности работы с базами данных. Триггеры...
Technopark
 
СУБД 2013 Лекция №3 "Выборка данных (продолжение). Транзакции"
Technopark
 
СУБД 2013 Лекция №2 "Модификация данных. Выборка данных (начало)"
Technopark
 
СУБД 2013 Лекция №1 "Введение и начало проектирования"
Technopark
 
Java осень 2014 занятие 7
Technopark
 
Java осень 2014 занятие 3
Technopark
 

Java осень 2013 лекция 6