OOP-Java.Library_new

advertisement
Основы программирования на
языке Java
Стандартная библиотека Java:
java.util, java.io, java.net
(С) Всеволод Рылов, все права защищены
Новосибирск, 2004
1
class Overview
«interface»
Iterator
«interface»
lang::Iterable
+ hasNext() : boolean
+ next() : E
+ remove() : void
+ iterator() : Iterator<T>
Map
Collection
Entry
Enumeration
EventListener
«interface»
ListIterator
Set
Queue
List
SortedMap
SortedSet
+
+
+
+
+
+
+
+
+
add(E) : void
hasNext() : boolean
hasPrevious() : boolean
next() : E
nextIndex() : int
previous() : E
previousIndex() : int
remove() : void
set(E) : void
Observable
0..*
Deque
«interface»
Observer
NavigableMap
NavigableSet
+ update(Observable, Object) : void
«interface»
Comparator
+ compare(T, T) : int
+ equals(Object) : boolean
Новосибирск, 2004
(С) Всеволод Рылов, все права защищены
2
Enumeration, Comparator
Enumeration – объекты классов, реализующих данный интерфейс,
используются для предоставления однопроходного
последовательного доступа к серии объектов:
Hashtable<String, String> t = …;
for(Enumeration<String> e = t.keys(); e.hasMoreElements();) {
String s = e.nextElement();
}
 Comparator – классы, реализующие данный интерфейс используются
для обеспечения сравнения произвольных элементов. Используются
при сортировке и организации упорядоченных контейнеров:
Comparator<MyCalss> c = new Comparator<MyClass> (){…};
MyClass array[] = …;
Arrays.sort(array,c);

(С) Всеволод Рылов, все права защищены
Новосибирск, 2004
3
Паттерн Model-View (Observer)
class Model-View(Observer)
Observable
+
+
+
+
+
+
+
+
addObserver(Observer) : void
countObservers() : int
deleteObserver(Observer) : void
deleteObservers() : void
hasChanged() : boolean
notifyObservers() : void
notifyObservers(Object) : void
Observable()
«interface»
Observer
0..*
+ update(Observable, Object) : void
Design Model::MyModelClass
+
+
+
+
#
getData() : Object
hasChanged() : boolean
notifyObservers() : void
notifyObservers(Object) : void
setChanged() : void
Новосибирск, 2004
+data
Design Model::MyViewClass
+ update(Observable, Object) : void
+ updateView() : void
(С) Всеволод Рылов, все права защищены
4
Коллекция объектов (контейнер)
class Collection
RuntimeException
lang::IllegalStateException
Iterable
«interface»
Collection
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
add(E) : boolean
addAll(Collection<? extends E>) : boolean
clear() : void
contains(Object) : boolean
containsAll(Collection<?>) : boolean
equals(Object) : boolean
hashCode() : int
isEmpty() : boolean
iterator() : Iterator<E>
remove(Object) : boolean
removeAll(Collection<?>) : boolean
retainAll(Collection<?>) : boolean
size() : int
toArray() : Object[]
toArray(T[]) : T[]
«interface»
Iterator
RuntimeException
NoSuchElementException
+ hasNext() : boolean
+ next() : E
+ remove() : void
RuntimeException
ConcurrentModificationException
E
AbstractCollection
Новосибирск, 2004
RuntimeException
lang::UnsupportedOperationException
(С) Всеволод Рылов, все права защищены
5
Использование итераторов
Collection<String> col = …;
for (Iterator<String> i = col.iterator(); i.hasNext(); ) {
String s = i.next();
}
for (String s : col ) { s; } //Альтернатива




ConcurrentModificationException – возникает когда коллекция
изменена во время итерирования другим потоком
IllegalStateException – возникает при попытке удаления элемента с
помощью вызова remove(), когда еще не был вызван первый метод
next(), или итератор указывает на конец коллекции (hasNext()
возвращает false)
NoSuchElementException – возникает при попытке вызова next()
когда hasNext() возвращает flase
UnsupportedOperationException – возникает при вызове метода
который не поддерживается конкретной реализацией коллекции
Новосибирск, 2004
(С) Всеволод Рылов, все права защищены
6
Множества
class Set
E
AbstractCollection
AbstractSet
Collection
«interface»
Set
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
add(E) : boolean
addAll(Collection<? extends E>) : boolean
clear() : void
contains(Object) : boolean
containsAll(Collection<?>) : boolean
equals(Object) : boolean
hashCode() : int
isEmpty() : boolean
iterator() : Iterator<E>
remove(Object) : boolean
removeAll(Collection<?>) : boolean
retainAll(Collection<?>) : boolean
size() : int
toArray() : Object[]
toArray(T[]) : T[]
Новосибирск, 2004
#
+
+
+
AbstractSet()
equals(Object) : boolean
hashCode() : int
removeAll(Collection<?>) : boolean
E
java.io.Serializable
HashSet
+
+
+
+
+
+
+
+
+
+
+
+
add(E) : boolean
clear() : void
clone() : Object
contains(Object) : boolean
HashSet()
HashSet(Collection<? extends E>)
HashSet(int, float)
HashSet(int)
isEmpty() : boolean
iterator() : Iterator<E>
remove(Object) : boolean
size() : int
(С) Всеволод Рылов, все права защищены
7
Упорядоченные множества
class SortedSet
E
AbstractSet
java.io.Serializable
Set
TreeSet
«interface»
SortedSet
+
+
+
+
+
+
comparator() : Comparator<? super E>
first() : E
headSet(E) : SortedSet<E>
last() : E
subSet(E, E) : SortedSet<E>
tailSet(E) : SortedSet<E>
«interface»
NavigableSet
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
ceiling(E) : E
descendingIterator() : Iterator<E>
descendingSet() : NavigableSet<E>
floor(E) : E
headSet(E, boolean) : NavigableSet<E>
headSet(E) : SortedSet<E>
higher(E) : E
iterator() : Iterator<E>
lower(E) : E
pollFirst() : E
pollLast() : E
subSet(E, boolean, E, boolean) : NavigableSet<E>
subSet(E, E) : SortedSet<E>
tailSet(E, boolean) : NavigableSet<E>
tailSet(E) : SortedSet<E>
Новосибирск, 2004
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
add(E) : boolean
addAll(Collection<? extends E>) : boolean
ceiling(E) : E
clear() : void
clone() : Object
comparator() : Comparator<? super E>
contains(Object) : boolean
descendingIterator() : Iterator<E>
descendingSet() : NavigableSet<E>
first() : E
floor(E) : E
headSet(E, boolean) : NavigableSet<E>
headSet(E) : SortedSet<E>
higher(E) : E
isEmpty() : boolean
iterator() : Iterator<E>
last() : E
lower(E) : E
pollFirst() : E
pollLast() : E
remove(Object) : boolean
size() : int
subSet(E, boolean, E, boolean) : NavigableSet<E>
subSet(E, E) : SortedSet<E>
tailSet(E, boolean) : NavigableSet<E>
tailSet(E) : SortedSet<E>
TreeSet()
TreeSet(Comparator<? super E>)
TreeSet(Collection<? extends E>)
TreeSet(SortedSet<E>)
(С) Всеволод Рылов, все права защищены
8
Очереди
class Queue
«interface»
Deque
Collection
«interface»
Queue
+
+
+
+
+
+
add(E) : boolean
element() : E
offer(E) : boolean
peek() : E
poll() : E
remove() : E
E
AbstractCollection
AbstractQueue
E
AbstractCollection
ArrayDeque
Новосибирск, 2004
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
add(E) : boolean
addFirst(E) : void
addLast(E) : void
contains(Object) : boolean
descendingIterator() : Iterator<E>
element() : E
getFirst() : E
getLast() : E
iterator() : Iterator<E>
offer(E) : boolean
offerFirst(E) : boolean
offerLast(E) : boolean
peek() : E
peekFirst() : E
peekLast() : E
poll() : E
pollFirst() : E
pollLast() : E
pop() : E
push(E) : void
remove() : E
remove(Object) : boolean
removeFirst() : E
removeFirstOccurrence(Object) : boolean
removeLast() : E
removeLastOccurrence(Object) : boolean
size() : int
(С) Всеволод Рылов, все права защищены
9
Списки
class List
«interface»
Iterator
+ hasNext() : boolean
+ next() : E
+ remove() : void
Collection
«interface»
List
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Новосибирск, 2004
add(E) : boolean
add(int, E) : void
addAll(Collection<? extends E>) : boolean
addAll(int, Collection<? extends E>) : boolean
clear() : void
contains(Object) : boolean
containsAll(Collection<?>) : boolean
equals(Object) : boolean
get(int) : E
hashCode() : int
indexOf(Object) : int
isEmpty() : boolean
iterator() : Iterator<E>
lastIndexOf(Object) : int
listIterator() : ListIterator<E>
listIterator(int) : ListIterator<E>
remove(Object) : boolean
remove(int) : E
removeAll(Collection<?>) : boolean
retainAll(Collection<?>) : boolean
set(int, E) : E
size() : int
subList(int, int) : List<E>
toArray() : Object[]
toArray(T[]) : T[]
«interface»
ListIterator
+
+
+
+
+
+
+
+
+
(С) Всеволод Рылов, все права защищены
add(E) : void
hasNext() : boolean
hasPrevious() : boolean
next() : E
nextIndex() : int
previous() : E
previousIndex() : int
remove() : void
set(E) : void
10
class List implementation
Реализации
списка
E
AbstractSequentialList
java.io.Serializable
LinkedList
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Новосибирск, 2004
add(E) : boolean
add(int, E) : void
addAll(Collection<? extends E>) : boolean
addAll(int, Collection<? extends E>) : boolean
addFirst(E) : void
addLast(E) : void
clear() : void
clone() : Object
contains(Object) : boolean
descendingIterator() : Iterator<E>
element() : E
get(int) : E
getFirst() : E
getLast() : E
indexOf(Object) : int
lastIndexOf(Object) : int
LinkedList()
LinkedList(Collection<? extends E>)
listIterator(int) : ListIterator<E>
offer(E) : boolean
offerFirst(E) : boolean
offerLast(E) : boolean
peek() : E
peekFirst() : E
peekLast() : E
poll() : E
pollFirst() : E
pollLast() : E
pop() : E
push(E) : void
remove(Object) : boolean
remove(int) : E
remove() : E
removeFirst() : E
removeFirstOccurrence(Object) : boolean
removeLast() : E
removeLastOccurrence(Object) : boolean
set(int, E) : E
size() : int
toArray() : Object[]
toArray(T[]) : T[]
Deque
List
E
AbstractList
java.io.Serializable
ArrayList
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
add(E) : boolean
add(int, E) : void
addAll(Collection<? extends E>) : boolean
addAll(int, Collection<? extends E>) : boolean
ArrayList(int)
ArrayList()
ArrayList(Collection<? extends E>)
clear() : void
clone() : Object
contains(Object) : boolean
ensureCapacity(int) : void
get(int) : E
indexOf(Object) : int
isEmpty() : boolean
lastIndexOf(Object) : int
remove(int) : E
remove(Object) : boolean
set(int, E) : E
size() : int
toArray() : Object[]
toArray(T[]) : T[]
trimToSize() : void
(С) Всеволод Рылов, все права защищены
11
Пример простой реализации стека
import java.util.*;
public class Stack<T> {
private LinkedList<T> content;
public Stack() {
content = new LinkedList<T>();
}
public void push(T obj) {
content.addFirst(obj);
}
public T pop() throws
NoSuchElementException
{
return content.removeFirst();
}
public boolean hasMoreElements() {
if (content.size() > 0) return true;
else return false;
}
Новосибирск, 2004
public static void main(String args[])
throws NoSuchElementException
{
Stack<String> s = new
Stack<String>();
for (String o : args) {
s.push(o);
}
while(s.hasMoreElements()) {
System.out.println(s.pop());
}
}
}
(С) Всеволод Рылов, все права защищены
12
Ассоциативные контейнеры
class Maps
«interface»
Map::Entry
+
+
+
+
+
«interface»
Map
+
+
+
+
+
+
+
+
+
+
+
+
+
+
clear() : void
containsKey(Object) : boolean
containsValue(Object) : boolean
entrySet() : Set<Map.Entry<K, V>>
equals(Object) : boolean
get(Object) : V
hashCode() : int
isEmpty() : boolean
keySet() : Set<K>
put(K, V) : V
putAll(Map<? extends K, ? extends V>)...
remove(Object) : V
size() : int
values() : Collection<V>
Новосибирск, 2004
equals(Object) : boolean
getKey() : K
getValue() : V
hashCode() : int
setValue(V) : V
K
V
AbstractMap
HashMap
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
clear() : void
clone() : Object
containsKey(Object) : boolean
containsValue(Object) : boolean
entrySet() : Set<Map.Entry<K,V>>
get(Object) : V
HashMap(int, float)
HashMap(int)
HashMap()
HashMap(Map<? extends K, ? extends V>)
isEmpty() : boolean
keySet() : Set<K>
put(K, V) : V
putAll(Map<? extends K, ? extends V>) : void
remove(Object) : V
size() : int
values() : Collection<V>
(С) Всеволод Рылов, все права защищены
13
class SortedMap
K
V
Map
AbstractMap
java.io.Serializable
«interface»
SortedMap
+
+
+
+
+
+
+
+
+
TreeMap
comparator() : Comparator<? super K>
entrySet() : Set<Map.Entry<K, V>>
firstKey() : K
headMap(K) : SortedMap<K,V>
keySet() : Set<K>
lastKey() : K
subMap(K, K) : SortedMap<K,V>
tailMap(K) : SortedMap<K,V>
values() : Collection<V>
«interface»
NavigableMap
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
ceilingEntry(K) : Map.Entry<K,V>
ceilingKey(K) : K
descendingKeySet() : NavigableSet<K>
descendingMap() : NavigableMap<K,V>
firstEntry() : Map.Entry<K,V>
floorEntry(K) : Map.Entry<K,V>
floorKey(K) : K
headMap(K, boolean) : NavigableMap<K,V>
headMap(K) : SortedMap<K,V>
higherEntry(K) : Map.Entry<K,V>
higherKey(K) : K
lastEntry() : Map.Entry<K,V>
lowerEntry(K) : Map.Entry<K,V>
lowerKey(K) : K
navigableKeySet() : NavigableSet<K>
pollFirstEntry() : Map.Entry<K,V>
pollLastEntry() : Map.Entry<K,V>
subMap(K, boolean, K, boolean) : NavigableMap<K,V>
subMap(K, K) : SortedMap<K,V>
tailMap(K, boolean) : NavigableMap<K,V>
tailMap(K) : SortedMap<K,V>
Новосибирск, 2004
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
ceilingEntry(K) : Map.Entry<K,V>
ceilingKey(K) : K
clear() : void
clone() : Object
comparator() : Comparator<? super K>
containsKey(Object) : boolean
containsValue(Object) : boolean
descendingKeySet() : NavigableSet<K>
descendingMap() : NavigableMap<K, V>
entrySet() : Set<Map.Entry<K,V>>
firstEntry() : Map.Entry<K,V>
firstKey() : K
floorEntry(K) : Map.Entry<K,V>
floorKey(K) : K
get(Object) : V
headMap(K, boolean) : NavigableMap<K,V>
headMap(K) : SortedMap<K,V>
higherEntry(K) : Map.Entry<K,V>
higherKey(K) : K
keySet() : Set<K>
lastEntry() : Map.Entry<K,V>
lastKey() : K
lowerEntry(K) : Map.Entry<K,V>
lowerKey(K) : K
navigableKeySet() : NavigableSet<K>
pollFirstEntry() : Map.Entry<K,V>
pollLastEntry() : Map.Entry<K,V>
put(K, V) : V
putAll(Map<? extends K, ? extends V>) : void
remove(Object) : V
size() : int
subMap(K, boolean, K, boolean) : NavigableMap<K,V>
subMap(K, K) : SortedMap<K,V>
tailMap(K, boolean) : NavigableMap<K,V>
tailMap(K) : SortedMap<K,V>
TreeMap()
TreeMap(Comparator<? super K>)
TreeMap(Map<? extends K, ? extends V>)
TreeMap(SortedMap<K, ? extends V>)
values() : Collection<V>
(С) Всеволод Рылов, все права защищены
14
class Vector
Вектор
E
AbstractList
java.io.Serializable
Vector
List
Новосибирск, 2004
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
add(E) : boolean
add(int, E) : void
addAll(Collection<? extends E>) : boolean
addAll(int, Collection<? extends E>) : boolean
addElement(E) : void
capacity() : int
clear() : void
clone() : Object
contains(Object) : boolean
containsAll(Collection<?>) : boolean
copyInto(Object[]) : void
elementAt(int) : E
elements() : Enumeration<E>
ensureCapacity(int) : void
equals(Object) : boolean
firstElement() : E
get(int) : E
hashCode() : int
indexOf(Object) : int
indexOf(Object, int) : int
insertElementAt(E, int) : void
isEmpty() : boolean
lastElement() : E
lastIndexOf(Object) : int
lastIndexOf(Object, int) : int
remove(Object) : boolean
remove(int) : E
removeAll(Collection<?>) : boolean
removeAllElements() : void
removeElement(Object) : boolean
removeElementAt(int) : void
retainAll(Collection<?>) : boolean
set(int, E) : E
setElementAt(E, int) : void
setSize(int) : void
size() : int
subList(int, int) : List<E>
toArray() : Object[]
toArray(T[]) : T[]
toString() : String
trimToSize() : void
Vector(int, int)
Vector(int)
Vector()
Vector(Collection<? extends E>)
E
Stack
+
+
+
+
+
+
empty() : boolean
peek() : E
pop() : E
push(E) : E
search(Object) : int
Stack()
(С) Всеволод Рылов, все права защищены
RuntimeException
EmptyStackException
+ EmptyStackException()
15
class Old
Хеш-таблица
K
V
Map
Dictionary
+
+
+
+
+
+
+
+
Dictionary()
elements() : Enumeration<V>
get(Object) : V
isEmpty() : boolean
keys() : Enumeration<K>
put(K, V) : V
remove(Object) : V
size() : int
K
V
java.io.Serializable
Hashtable
Properties
#defaults
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
getProperty(String) : String
getProperty(String, String) : String
list(PrintStream) : void
list(PrintWriter) : void
load(Reader) : void
load(InputStream) : void
loadFromXML(InputStream) : void
Properties()
Properties(Properties)
propertyNames() : Enumeration<?>
save(OutputStream, String) : void
setProperty(String, String) : Object
store(Writer, String) : void
store(OutputStream, String) : void
storeToXML(OutputStream, String) : void
storeToXML(OutputStream, String, String) : void
stringPropertyNames() : Set<String>
Новосибирск, 2004
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
clear() : void
clone() : Object
contains(Object) : boolean
containsKey(Object) : boolean
containsValue(Object) : boolean
elements() : Enumeration<V>
entrySet() : Set<Map.Entry<K,V>>
equals(Object) : boolean
get(Object) : V
hashCode() : int
Hashtable(int, float)
Hashtable(int)
Hashtable()
Hashtable(Map<? extends K, ? extends V>)
isEmpty() : boolean
keys() : Enumeration<K>
keySet() : Set<K>
put(K, V) : V
putAll(Map<? extends K, ? extends V>) : void
remove(Object) : V
size() : int
toString() : String
values() : Collection<V>
(С) Всеволод Рылов, все права защищены
16
Класс-утилита Collections




Служит для поддержки классов контейнеров и осуществления
основных манипуляций с содержимым:
 sort(List), sort(List, Comparator)
 binarySearch(List, Object), binarySearch(List, Object, Comparator)
 reverse(List)
 shuffle(List), shuffle(List,Random)
 fill(List,Object)
 copy(List, List)
 min(Collection), min(Collection, Comparator)
 max(Collection), max(Collection,Comoarator)
Представляет коллекцию как Enumeration (метод
enumeration(Collection))
Создает не модифицируемый список, содержащий несколько копий
объекта: nCopies(int,Object):List
Содержит специальные статические поля: EMPTY_SET,
EMPTY_LIST, EMPTY_MAP
Новосибирск, 2004
(С) Всеволод Рылов, все права защищены
17
Класс-утилита Collections (продолж.)


Предоставляет обертки для защиты контейнеров от модификации
или для обеспечения синхронизированного доступа:
 unmodifiableXXX(arg:XXX):XXX
 synchronizedXXX(arg:XXX):XXX
 XXX - это Collection, Set, SortedSet, List, Map, SortedMap
Предоставляет не модифицируемые обертки-одиночки, содержащие
только один элемент (или пару ключ-значение):
 singleton(Object):Set
 singletonList(Object):List
 singletonMap(Object,Object):Map
Новосибирск, 2004
(С) Всеволод Рылов, все права защищены
18
Работа со временем
TimeZone
Calendar
Date
GregorianCalendar
Новосибирск, 2004
(С) Всеволод Рылов, все права защищены
19
Таймер и планируемые задания
Новосибирск, 2004
(С) Всеволод Рылов, все права защищены
20
Интернационализация
Новосибирск, 2004
(С) Всеволод Рылов, все права защищены
21
Подсистема ввода-вывода java.io
InputStream
OutputStream
IOException
Reader
Writer
<<Interface>>
DataInput
<<Interface>>
DataOutput
<<Interface>>
Serializable
<<Interface>>
ObjectInput
<<Interface>>
ObjectOutput
<<Interface>>
Externalizable
Новосибирск, 2004
File
(С) Всеволод Рылов, все права защищены
22
Средства работы с файлами
Новосибирск, 2004
(С) Всеволод Рылов, все права защищены
23
Потоки ввода-вывода

Потоки ввода вывода бывают двух типов:
 узловые потоки (node streams) – предоставляют ввод вывод на
уровне потоков байт
 фильтрующие потоки (filter streams) – предоставляют обертки
вокруг низкоуровневых потоков для обеспечения расширенной
функциональности
Новосибирск, 2004
(С) Всеволод Рылов, все права защищены
24
Узловые потоки


Узловые потоки работают непосредственно с подлежащими
источниками (приемниками) данных на уровне байт.
Источниками(приемниками) могут быть:
 файлы на файловой системе – FileInputStream, FileOutputStream
 массивы байт в памяти – ByteArrayInputStream,
ByteArrayOutputStream
 каналы (pipes) - PipedInputStream, PipedOutputStream
 строки – StringBufferInputStream (deprecated)
 прочие источники – сокеты и т.д: something.getInputStream(),
something.getOutputStream()
Новосибирск, 2004
(С) Всеволод Рылов, все права защищены
25
Пример – копирование файлов
import java.io.*;
public class FileCopy {
public static void main(String args[]) {
InputStream in = null;
OutputStream out = null;
try {
in = new FileInputStream(args[0]);
out = new FileOutputStream(args[1]);
} catch (Exception e) {
System.out.println("Неправильные аргументы");
if (in!=null) try {in.close();} catch(IOException ix2){}
return;
}
byte buf[] = new byte[1024]; //Буфер для хранения промежуточного блока
int read; //Переменная для хранения количества прочитанных байт
try {
while ( (read = in.read(buf)) >= 0) //При достижении конца вернет <0
out.write(buf, 0, read); //Записываем ровно столько сколько удалось прочитать
} catch (IOException ioex) {
System.out.println(“Ошибка ввода/вывода:”+ioex.getLocalizedMessage());
} finally {
try {in.close();} catch(IOException ix2){}
try {out.close();} catch (IOException ix3) {}
}
}
Новосибирск,
2004
}
(С) Всеволод Рылов, все права защищены
26
Фильтрующие потоки

Фильтрующие потоки предоставляют дополнительную
функциональность на основе других потоков
 абстрактные – FilterInputStream, FilterOutputStream
 буферизация – BufferedInputStream, BufferedOutputStream
 форматированный ввод-вывод данных – DataInputStream,
DataOutputStream
 сериализация объектов – ObjectInputStream, ObjectOutputStream
 опережающее чтение – PushbackInputStream
 объединение потоков – SequenceInputStream
 печатный поток вывода – PrintStream
 построчное чтение – LineNumberInputStream (deprecated)
Новосибирск, 2004
(С) Всеволод Рылов, все права защищены
27
Произвольный доступ к файлу

RandomAccessFile используется для осуществления произвольного
доступа к содержимому файла:
 обеспечивает форматированный ввод-вывод данных (реализует
интерфейсы DataInput и DataOutput)
 void seek(long) - позиционирование в файле
 long getFilePointer() - текущая позиция курсора
Новосибирск, 2004
(С) Всеволод Рылов, все права защищены
28
Символьные потоки (readers & writers)


В отличие от байтовых потоков, работают на уровне символов,
что позволяет корректно работать с различными кодировками
В качестве мостов между байтовыми и символьными потоками
используются классы InputStreamReader и OutputStreamWriter
Новосибирск, 2004
(С) Всеволод Рылов, все права защищены
29
Символьные потоки


Узловые символьные потоки:
 файловые – FileReader, FileWriter
 на основе массивов символов – CharArrayReader, CharArrayWriter
 канальные – PipedReader, PipedWriter
 строковые – StringReader, StringWriter
Фильтрующие символьные потоки:
 абстрактные – FilterReader, FilterWriter
 буферизирующие – BufferedReader, BufferedWriter
 переходные – InputStreamReader, OutputStreamWriter
 опережающее чтение – PushbackReader
 по строчное чтение – LineNumberReader
 печатный поток вывода – PrintWriter
Новосибирск, 2004
(С) Всеволод Рылов, все права защищены
30
StreamTokenizer class
Новосибирск, 2004
(С) Всеволод Рылов, все права защищены
31
Сериализация объектов



Средства сериализации и десериализации объектов пакета
java.io реализуют поддержку принципа сохраняемости ООП
Сериализация используется для сохранения иерархий
объектов для передачи в другую виртуальную машину, либо
для последующего восстановления в другом сеансе работы
системы
Особенности сериализации:
 версионность классов сериализуемых объектов
 сохранение иерархий
 кеширование и переиспользование ссылок на уже
сериализованные объекты
 средства управления процессом сериализации
(десериализации) объектов
Новосибирск, 2004
(С) Всеволод Рылов, все права защищены
32
Новосибирск, 2004
(С) Всеволод Рылов, все права защищены
33
Исключения при сериализации
Новосибирск, 2004
(С) Всеволод Рылов, все права защищены
34
Общие правила






Классы, объекты которых подлежат сериализации должны
реализовывать маркерный интерфейс java.io.Serializable
По умолчанию подлежат сохранению все поля объектов не
объявленные transient. Статические поля не сеариализуются
Для сериализации и десериализации используются фильтрующие
потоки ObjectOutputStream и ObjectInputStream
Сериализуемые поля класса реализующего интерфейс
Serializable должны быть примитивными типами либо типами,
реализующими интерфейс Serializable
Если класс имеет своим суперклассом класс, не реализующий
интерфейс Serializable, то у данного суперкласса должен быть
доступен конструктор с пустым списком аргументов
Сериалиазации внутренних или анонимных классов следует
категорически избегать
Новосибирск, 2004
(С) Всеволод Рылов, все права защищены
35
Управление сериализацией объекта




Для явного определения списка сериализуемых полей нужно в
классе объявить поле private static final ObjectStreamField[]
serialPersistentFields = {…};
Для управления процессом сериализации/десериализации нужно в
классе объявить методы:
 private void writeObject(java.io.ObjectOutputStream out) throws
IOException {…}
 private void readObject(java.io.ObjectInputStream in) throws
IOException, ClassNotFoundException {…}
Для управления замещением объкта при
сериализации/десериализации нужно определить методы:
 Object writeReplace() throws ObjectStreamException {…}
 Object readResolve() throws ObjectStreamException {…}
Для явного задания номера версии нужно определить поле
 static final long serialVersionUID = …;
Новосибирск, 2004
(С) Всеволод Рылов, все права защищены
36
Интерфейс java.io.Externalizable




Позволяет полностью управлять форматом записи данных класса
(автоматически сохраняется только информация об классе и
объекте)
Для сохранения состояния нужно реализовать метод
 public void writeExternal(ObjectOutput out) throws IOException
Для восстановления состояния нужно реализовать метод
 public void readExternal(ObjectInput in) throws IOException,
java.lang.ClassNotFoundException
Класс реализующий интерфейс Externalizable должен иметь public
конструктор с пустым списком аргументов
Новосибирск, 2004
(С) Всеволод Рылов, все права защищены
37
Версионность

Изменения, ведущие к несовместимости версий классов:
 Удаление полей не объявленных transient
 Изменение позиции класса в иерархии классов
 Изменение факта наличия/отсутствия модификаторов static и
transient у поля
 Изменение типа у поля примитивного (встроенного) типа
 Изменение реализации методов writeObject() и readObject() на
предмет использования методов defaultWriteObject() и
defaultReadObject() классов ObjectOutputStream и
ObjectInputStream соответственно
 Изменение класса с Serializable на Externalizable и наоборот
 Добавление методов writeReplace() или readResolve()
 Изменение факта наследования классом интерфейсов
Serializable или Externalizable
Новосибирск, 2004
(С) Всеволод Рылов, все права защищены
38
Работа с сетью

Для работы с сетью используется пакет java.net, предоставляющий
средства:
 адресации в Internet (InetAddress, + средства java 1.4:
Inet4Address, Inet6Address, InetSocketAddress, SocketAddress)
 работы с протоколом TCP (Socket, ServerSocket, SocketOptions)
 работы с протоколом UDP (DatagramSocket, DatagramPacket,
MulticastSocket)
 работы с URL и поддержки HTTP (URL, URLConnection,
HttpURLConnection, JarURLConnection, URLDecoder,
URLEncoder, ContentHandler, URLStreamHandler)
 авторизации в Internet (Authenticator, PasswordAuthentication)
 динамической загрузки классов из сети (URLClassLoader)
Новосибирск, 2004
(С) Всеволод Рылов, все права защищены
39
Исключения пакета java.net
IOException
(from io)
UnknownServiceException
UnknownHostException
SocketException
ProtocolException
MalformedURLException
NoRouteToHostException
ConnectException
BindException
Новосибирск, 2004
(С) Всеволод Рылов, все права защищены
40
Download