Основы программирования на языке Java

40
Новосибирск, 2004 (С) Всеволод Рылов, все права защищены 1 Основы программирования на языке Java Стандартная библиотека Java: java.util, java.io, java.net

description

Стандартная библиотека Java: java.util, java.io, java.net. Основы программирования на языке Java. Enumeration, Comparator. Enumeration – объекты классов , реализующих данный интерфейс , используются для предоставления однопроходного последовательного доступа к серии объектов : - PowerPoint PPT Presentation

Transcript of Основы программирования на языке Java

Page 1: Основы программирования на языке Java

Новосибирск, 2004

(С) Всеволод Рылов, все права защищены 1

Основы программирования на языке Java

Стандартная библиотека Java: java.util, java.io, java.net

Page 2: Основы программирования на языке Java

Новосибирск, 2004

(С) Всеволод Рылов, все права защищены 2

class Overview

Collection

«interface»lang::Iterable

+ iterator() : Iterator<T>

ListSet

Map

SortedSet

SortedMap

Entry

«interface»Iterator

+ hasNext() : boolean+ next() : E+ remove() : void

«interface»ListIterator

+ add(E) : void+ hasNext() : boolean+ hasPrevious() : boolean+ next() : E+ nextIndex() : int+ previous() : E+ previousIndex() : int+ remove() : void+ set(E) : void

«interface»Comparator

+ compare(T, T) : int+ equals(Object) : boolean

EventListener

Enumeration

«interface»Observer

+ update(Observable, Object) : void

Queue

Deque

NavigableMapNavigableSet

Observable

0..*

Page 3: Основы программирования на языке Java

Новосибирск, 2004

(С) Всеволод Рылов, все права защищены 3

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);

Page 4: Основы программирования на языке Java

Паттерн Model-View (Observer)

Новосибирск, 2004

(С) Всеволод Рылов, все права защищены 4

class Model-View(Observer)

Design Model::MyModelClass

+ getData() : Object+ hasChanged() : boolean+ notifyObservers() : void+ notifyObservers(Object) : void# setChanged() : void

Design Model::MyViewClass

+ update(Observable, Object) : void+ updateView() : void

«interface»Observer

+ update(Observable, Object) : void

Observable

+ addObserver(Observer) : void+ countObservers() : int+ deleteObserver(Observer) : void+ deleteObservers() : void+ hasChanged() : boolean+ notifyObservers() : void+ notifyObservers(Object) : void+ Observable()

+data

0..*

Page 5: Основы программирования на языке Java

Коллекция объектов (контейнер)

Новосибирск, 2004

(С) Всеволод Рылов, все права защищены 5

class Collection

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

+ hasNext() : boolean+ next() : E+ remove() : void

RuntimeExceptionConcurrentModificationException

RuntimeExceptionlang::UnsupportedOperationException

RuntimeExceptionNoSuchElementException

RuntimeExceptionlang::IllegalStateException

E

AbstractCollection

Page 6: Основы программирования на языке Java

Новосибирск, 2004

(С) Всеволод Рылов, все права защищены 6

Использование итераторов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 – возникает при вызове метода который не поддерживается конкретной реализацией коллекции

Page 7: Основы программирования на языке Java

Множества

Новосибирск, 2004

(С) Всеволод Рылов, все права защищены 7

class Set

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[]

java.io.Serializable

E

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

AbstractCollection

E

AbstractSet

# AbstractSet()+ equals(Object) : boolean+ hashCode() : int+ removeAll(Collection<?>) : boolean

Page 8: Основы программирования на языке Java

Упорядоченные множества

Новосибирск, 2004

(С) Всеволод Рылов, все права защищены 8

class SortedSet

«interface»SortedSet

+ comparator() : Comparator<? super E>+ first() : E+ headSet(E) : SortedSet<E>+ last() : E+ subSet(E, E) : SortedSet<E>+ tailSet(E) : SortedSet<E>

Set AbstractSetjava.io.Serializable

E

TreeSet

+ 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>)

«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>

Page 9: Основы программирования на языке Java

Очереди

Новосибирск, 2004

(С) Всеволод Рылов, все права защищены 9

class Queue

«interface»Deque

+ 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

Collection

«interface»Queue

+ add(E) : boolean+ element() : E+ offer(E) : boolean+ peek() : E+ poll() : E+ remove() : E

AbstractCollection

E

AbstractQueue

AbstractCollection

E

ArrayDeque

Page 10: Основы программирования на языке Java

Списки

Новосибирск, 2004

(С) Всеволод Рылов, все права защищены 10

class List

«interface»List

+ 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

Collection

«interface»Iterator

+ hasNext() : boolean+ next() : E+ remove() : void

Page 11: Основы программирования на языке Java

Реализации списка

Новосибирск, 2004

(С) Всеволод Рылов, все права защищены 11

class List implementation

AbstractSequentialListjava.io.Serializable

E

LinkedList

+ 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[]

AbstractListjava.io.Serializable

E

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

ListDeque

Page 12: Основы программирования на языке Java

Новосибирск, 2004

(С) Всеволод Рылов, все права защищены 12

Пример простой реализации стека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; }

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()); } } }

Page 13: Основы программирования на языке Java

Ассоциативные контейнеры

Новосибирск, 2004

(С) Всеволод Рылов, все права защищены 13

class Maps

«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>

«interface»Map::Entry

+ equals(Object) : boolean+ getKey() : K+ getValue() : V+ hashCode() : int+ setValue(V) : V

AbstractMap

KV

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>

Page 14: Основы программирования на языке Java

Новосибирск, 2004

(С) Всеволод Рылов, все права защищены 14

class SortedMap

Map

«interface»SortedMap

+ 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>

AbstractMapjava.io.Serializable

KV

TreeMap

+ 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>

Page 15: Основы программирования на языке Java

Вектор

Новосибирск, 2004

(С) Всеволод Рылов, все права защищены 15

class Vector

AbstractListjava.io.Serializable

E

Vector

+ 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>)

List

E

Stack

+ empty() : boolean+ peek() : E+ pop() : E+ push(E) : E+ search(Object) : int+ Stack()

RuntimeExceptionEmptyStackException

+ EmptyStackException()

Page 16: Основы программирования на языке Java

Хеш-таблица

Новосибирск, 2004

(С) Всеволод Рылов, все права защищены 16

class Old

KV

Dictionary

+ Dictionary()+ elements() : Enumeration<V>+ get(Object) : V+ isEmpty() : boolean+ keys() : Enumeration<K>+ put(K, V) : V+ remove(Object) : V+ size() : int

java.io.Serializable

KV

Hashtable

+ 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>

Map

Properties

+ 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>

#defaults

Page 17: Основы программирования на языке Java

Новосибирск, 2004

(С) Всеволод Рылов, все права защищены 17

Класс-утилита 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

Page 18: Основы программирования на языке Java

Новосибирск, 2004

(С) Всеволод Рылов, все права защищены 18

Класс-утилита 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

Page 19: Основы программирования на языке Java

Новосибирск, 2004

(С) Всеволод Рылов, все права защищены 19

Работа со временем

TimeZone

Date

Calendar

GregorianCalendar

Page 20: Основы программирования на языке Java

Новосибирск, 2004

(С) Всеволод Рылов, все права защищены 20

Таймер и планируемые задания

TimerTask

TimerTask()run() : voidcancel() : booleanscheduledExecutionTime() : long

Timer

Timer()Timer(arg0 : boolean)schedule(arg0 : TimerTask, arg1 : long) : voidschedule(arg0 : TimerTask, arg1 : Date) : voidschedule(arg0 : TimerTask, arg1 : long, arg2 : long) : voidschedule(arg0 : TimerTask, arg1 : Date, arg2 : long) : voidscheduleAtFixedRate(arg0 : TimerTask, arg1 : long, arg2 : long) : voidscheduleAtFixedRate(arg0 : TimerTask, arg1 : Date, arg2 : long) : voidcancel() : void

Runnable

run()

(from lang)

<<Interface>>

Page 21: Основы программирования на языке Java

Новосибирск, 2004

(С) Всеволод Рылов, все права защищены 21

ИнтернационализацияLocale

Locale(arg0 : String, arg1 : String, arg2 : String)Locale(arg0 : String, arg1 : String)getDefault() : LocalesetDefault(arg0 : Locale) : voidgetAvailableLocales() : Locale[]getISOCountries() : String[]getISOLanguages() : String[]getLanguage() : StringgetCountry() : StringgetVariant() : StringtoString() : StringgetISO3Language() : StringgetISO3Country() : StringgetDisplayLanguage() : StringgetDisplayLanguage(arg0 : Locale) : StringgetDisplayCountry() : StringgetDisplayCountry(arg0 : Locale) : StringgetDisplayVariant() : StringgetDisplayVariant(arg0 : Locale) : StringgetDisplayName() : StringgetDisplayName(arg0 : Locale) : Stringclone() : ObjecthashCode() : intequals(arg0 : Object) : boolean

Page 22: Основы программирования на языке Java

Новосибирск, 2004

(С) Всеволод Рылов, все права защищены 22

Подсистема ввода-вывода java.io

Serializable<<Interface>>

ObjectOutput<<Interface>>

ObjectInput<<Interface>>

Externalizable<<Interface>>

DataOutput<<Interface>>

DataInput<<Interface>>

InputStream OutputStream

Reader Writer File

IOException

Page 23: Основы программирования на языке Java

Новосибирск, 2004

(С) Всеволод Рылов, все права защищены 23

Средства работы с файлами

File

separatorChar : charpathSeparatorChar : charseparator : StringpathSeparator : String

FileDescriptor

in : FileDescriptorout : FileDescriptorerr : FileDescriptor

FileDescriptor()valid()sync()

FileFilter

accept(arg0 : File) : boolean

<<Interface>>

FilenameFilter

accept(arg0 : File, arg1 : String) : boolean

<<Interface>>

Page 24: Основы программирования на языке Java

Новосибирск, 2004

(С) Всеволод Рылов, все права защищены 24

Потоки ввода-вывода Потоки ввода вывода бывают двух типов:

узловые потоки (node streams) – предоставляют ввод вывод на уровне потоков байт

фильтрующие потоки (filter streams) – предоставляют обертки вокруг низкоуровневых потоков для обеспечения расширенной функциональности

InputStream

InputStream()read() : intread(arg0 : byte[]) : intread(arg0 : byte[], arg1 : int, arg2 : int) : intskip(arg0 : long) : longavailable() : intclose() : voidmark(arg0 : int) : voidreset() : voidmarkSupported() : boolean

OutputStream

OutputStream()write(arg0 : int) : voidwrite(arg0 : byte[]) : voidwrite(arg0 : byte[], arg1 : int, arg2 : int) : voidflush() : voidclose() : void

Page 25: Основы программирования на языке Java

Новосибирск, 2004

(С) Всеволод Рылов, все права защищены 25

Узловые потоки

Узловые потоки работают непосредственно с подлежащими источниками (приемниками) данных на уровне байт.

Источниками(приемниками) могут быть: файлы на файловой системе – FileInputStream, FileOutputStream массивы байт в памяти – ByteArrayInputStream,

ByteArrayOutputStream каналы (pipes) - PipedInputStream, PipedOutputStream строки – StringBufferInputStream (deprecated) прочие источники – сокеты и т.д: something.getInputStream(),

something.getOutputStream()

Page 26: Основы программирования на языке Java

Новосибирск, 2004

(С) Всеволод Рылов, все права защищены 26

Пример – копирование файлов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) {} } }}

Page 27: Основы программирования на языке Java

Новосибирск, 2004

(С) Всеволод Рылов, все права защищены 27

Фильтрующие потоки

Фильтрующие потоки предоставляют дополнительную функциональность на основе других потоков абстрактные – FilterInputStream, FilterOutputStream буферизация – BufferedInputStream, BufferedOutputStream форматированный ввод-вывод данных – DataInputStream,

DataOutputStream сериализация объектов – ObjectInputStream, ObjectOutputStream опережающее чтение – PushbackInputStream объединение потоков – SequenceInputStream печатный поток вывода – PrintStream построчное чтение – LineNumberInputStream (deprecated)

Page 28: Основы программирования на языке Java

Новосибирск, 2004

(С) Всеволод Рылов, все права защищены 28

Произвольный доступ к файлу RandomAccessFile используется для осуществления произвольного

доступа к содержимому файла: обеспечивает форматированный ввод-вывод данных (реализует

интерфейсы DataInput и DataOutput) void seek(long) - позиционирование в файле long getFilePointer() - текущая позиция курсора

Page 29: Основы программирования на языке Java

Новосибирск, 2004

(С) Всеволод Рылов, все права защищены 29

Символьные потоки (readers & writers)

В отличие от байтовых потоков, работают на уровне символов, что позволяет корректно работать с различными кодировками

В качестве мостов между байтовыми и символьными потоками используются классы InputStreamReader и OutputStreamWriter

Writer

lock : Object

Writer()Writer(arg0 : Object)write(arg0 : int) : voidwrite(arg0 : char[]) : voidwrite(arg0 : char[], arg1 : int, arg2 : int) : voidwrite(arg0 : String) : voidwrite(arg0 : String, arg1 : int, arg2 : int) : voidflush() : voidclose() : void

Reader

lock : Object

Reader()Reader(arg0 : Object)read() : intread(arg0 : char[]) : intread(arg0 : char[], arg1 : int, arg2 : int) : intskip(arg0 : long) : longready() : booleanmarkSupported() : booleanmark(arg0 : int) : voidreset() : voidclose() : void

Page 30: Основы программирования на языке Java

Новосибирск, 2004

(С) Всеволод Рылов, все права защищены 30

Символьные потоки Узловые символьные потоки:

файловые – FileReader, FileWriter на основе массивов символов – CharArrayReader, CharArrayWriter канальные – PipedReader, PipedWriter строковые – StringReader, StringWriter

Фильтрующие символьные потоки: абстрактные – FilterReader, FilterWriter буферизирующие – BufferedReader, BufferedWriter переходные – InputStreamReader, OutputStreamWriter опережающее чтение – PushbackReader по строчное чтение – LineNumberReader печатный поток вывода – PrintWriter

Page 31: Основы программирования на языке Java

Новосибирск, 2004

(С) Всеволод Рылов, все права защищены 31

StreamTokenizer classStreamTokenizer

ttype : intTT_EOF : int = -1TT_EOL : int = 10TT_NUMBER : int = -2TT_WORD : int = -3nval : doublesval : String

StreamTokenizer(arg0 : InputStream)StreamTokenizer(arg0 : Reader)resetSyntax() : voidwordChars(arg0 : int, arg1 : int) : voidwhitespaceChars(arg0 : int, arg1 : int) : voidordinaryChars(arg0 : int, arg1 : int) : voidordinaryChar(arg0 : int) : voidcommentChar(arg0 : int) : voidquoteChar(arg0 : int) : voidparseNumbers() : voideolIsSignificant(arg0 : boolean) : voidslashStarComments(arg0 : boolean) : voidslashSlashComments(arg0 : boolean) : voidlowerCaseMode(arg0 : boolean) : voidnextToken() : intpushBack() : voidlineno() : inttoString() : String

Page 32: Основы программирования на языке Java

Новосибирск, 2004

(С) Всеволод Рылов, все права защищены 32

Сериализация объектов

Средства сериализации и десериализации объектов пакета java.io реализуют поддержку принципа сохраняемости ООП

Сериализация используется для сохранения иерархий объектов для передачи в другую виртуальную машину, либо для последующего восстановления в другом сеансе работы системы

Особенности сериализации: версионность классов сериализуемых объектов сохранение иерархий кеширование и переиспользование ссылок на уже

сериализованные объекты средства управления процессом сериализации

(десериализации) объектов

Page 33: Основы программирования на языке Java

Новосибирск, 2004

(С) Всеволод Рылов, все права защищены 33

ObjectInput

readObject() : Objectread() : intread(arg0 : byte[]) : intread(arg0 : byte[], arg1 : int, arg2 : int) : intskip(arg0 : long) : longavailable() : intclose() : void

<<Interface>>

ObjectInputStream

ObjectOutput

writeObject(arg0 : Object) : voidwrite(arg0 : int) : voidwrite(arg0 : byte[]) : voidwrite(arg0 : byte[], arg1 : int, arg2 : int) : voidflush() : voidclose() : void

<<Interface>>

ObjectOutputStream

Externalizable

writeExternal(arg0 : ObjectOutput) : voidreadExternal(arg0 : ObjectInput) : void

<<Interface>>

Serializable<<Interface>>

ObjectStreamClass

ObjectStreamConstants<<Interface>>

ObjectStreamField

ObjectInputValidation

validateObject()

<<Interface>>

Page 34: Основы программирования на языке Java

Новосибирск, 2004

(С) Всеволод Рылов, все права защищены 34

Исключения при сериализации

InvalidClassException

InvalidObjectException

ObjectStreamException

NotSerializableExceptionNotActiveException

StreamCorruptedExceptionWriteAbortedExceptiondetail : Exception

OptionalDataException

Page 35: Основы программирования на языке Java

Новосибирск, 2004

(С) Всеволод Рылов, все права защищены 35

Общие правила

Классы, объекты которых подлежат сериализации должны реализовывать маркерный интерфейс java.io.Serializable

По умолчанию подлежат сохранению все поля объектов не объявленные transient. Статические поля не сеариализуются

Для сериализации и десериализации используются фильтрующие потоки ObjectOutputStream и ObjectInputStream

Сериализуемые поля класса реализующего интерфейс Serializable должны быть примитивными типами либо типами, реализующими интерфейс Serializable

Если класс имеет своим суперклассом класс, не реализующий интерфейс Serializable, то у данного суперкласса должен быть доступен конструктор с пустым списком аргументов

Сериалиазации внутренних или анонимных классов следует категорически избегать

Page 36: Основы программирования на языке Java

Новосибирск, 2004

(С) Всеволод Рылов, все права защищены 36

Управление сериализацией объекта

Для явного определения списка сериализуемых полей нужно в классе объявить поле 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 = …;

Page 37: Основы программирования на языке Java

Новосибирск, 2004

(С) Всеволод Рылов, все права защищены 37

Интерфейс java.io.Externalizable

Позволяет полностью управлять форматом записи данных класса (автоматически сохраняется только информация об классе и объекте)

Для сохранения состояния нужно реализовать метод public void writeExternal(ObjectOutput out) throws

IOException Для восстановления состояния нужно реализовать метод

public void readExternal(ObjectInput in) throws IOException, java.lang.ClassNotFoundException

Класс реализующий интерфейс Externalizable должен иметь public конструктор с пустым списком аргументов

Page 38: Основы программирования на языке Java

Новосибирск, 2004

(С) Всеволод Рылов, все права защищены 38

Версионность

Изменения, ведущие к несовместимости версий классов: Удаление полей не объявленных transient Изменение позиции класса в иерархии классов Изменение факта наличия/отсутствия модификаторов static и

transient у поля Изменение типа у поля примитивного (встроенного) типа Изменение реализации методов writeObject() и readObject() на

предмет использования методов defaultWriteObject() и defaultReadObject() классов ObjectOutputStream и ObjectInputStream соответственно

Изменение класса с Serializable на Externalizable и наоборот Добавление методов writeReplace() или readResolve() Изменение факта наследования классом интерфейсов

Serializable или Externalizable

Page 39: Основы программирования на языке Java

Новосибирск, 2004

(С) Всеволод Рылов, все права защищены 39

Работа с сетью

Для работы с сетью используется пакет 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)

Page 40: Основы программирования на языке Java

Новосибирск, 2004

(С) Всеволод Рылов, все права защищены 40

Исключения пакета java.net

BindException

ConnectException

MalformedURLException

NoRouteToHostException

ProtocolExceptionSocketException

UnknownHostExceptionUnknownServiceException

IOException(from io)