Documente Academic
Documente Profesional
Documente Cultură
Java NIO
Implementri Channel
Un obiect Channel reprezint o conexiune deschis la o entitate, cum ar fi un
fiier, un socket, sau orice component capabila de a efectua operaii de
intrare/iesire, citire/scriere
Diferene Channel-Stream:
obiectul Channel este bidirecional , Stream este unidirecional
obiectul Channel scrie/citete asincron
Implementri Channel:
FileChannel - citire/scriere din/n fiiere
DatagramChannel - citire/scriere din/n reea utiliznd UDP
SocketChannel - citire/scriere din/n reea utiliznd TCP
ServerSocketChannel - permite crearea unui server TCP pentru
citiri/scrieri n reea
FileChannel
Obtinerea obiectelor Channel
prin metodele open definite in Channel
public static FileChannel open(Path path, OpenOption... options) throws
IOException
unde options pot fi APPEND, CREATE, CREATE_NEW,... constante definite
in StandardOpenOption
prin obiectele Stream: FileInputStream, FileOutputStream
public FileChannel getChannel()
prin obiecte RandomAccessFile
public final FileChannel getChannel()
Transferul intre obiecte Channel
public abstract long transferFrom(ReadableByteChannel src, long position,
long count) throws IOException
public abstract long transferTo(long position,long count,WritableByteChannel
target) throws IOException; // Transfer spre target. position,count se refera
la canalul curent
Implementri Buffer
ByteBuffer , MappedByteBuffer , CharBuffer , DoubleBuffer , FloatBuffer ,
IntBuffer , LongBuffer , ShortBuffer
Un Buffer este un bloc de memorie in care se pot scrie date care apoi pot fi
citite.
Proprietatile unui Buffer:
capacity - dimensiunea maxima a Buffer-ului
position - este indexul urmtorului element care poate fi citit sau scris la un
moment dat
limit - este indicele primului element care nu poate fi scris/citit
mark - este un marcaj de pozitie retinut pentru reveniri ulterioare
0 <= mark <= position <= limit <= capacity
Operaiuni Buffer:
1. Alocarea se face prin metoda statica allocate a clasei Buffer (ByteBuffer,
DoubleBuffer, ...):
public static ByteBuffer allocate(int capacity)
Metode de scriere/citire
2. Scrierea datelor in Buffer din Channel prin metode read ale clasei
FileChannel:
public abstract int read(ByteBuffer dst) throws IOException; // intoarce
numarul de bytes cititi. Dupa citire: position=limit
3. Scrierea voluntar in buffer prin metode put ale bufferului:
public abstract ByteBuffer put(byte b); // scrie la pozitia curenta cu
incrementarea pozitiei
public abstract ByteBuffer put(int index, byte b);// scrie la pozitia indicata
4. Citirea din Buffer si scrierea in Channel:
public abstract int write(ByteBuffer src) throws IOException; // intoarce
numarul de bytes cititi din src de pe pozitia curenta -> position=limit
5. Citirea voluntar din Buffer prin metode get ale bufferului:
public abstract byte get(); //citire de la pozitia curenta cu incrementarea
pozitiei
public abstract byte get(int index); //citire de la pozitia indicata
Strile Buffer
7. Trecerea Buffer-ului din modul scriere n modul citire:
public final Buffer flip(); //limit=position, position=0
8. Stergere Buffer
public final Buffer clear(); //position=0, limit=capacity - Pregatire scriere/citire
in/din buffer
public final Buffer rewind(); //position=0
public final Buffer mark(); // este marcata pozitia curenta, mark=position
public final Buffer reset(); // este stabilita pozitia pe marcajul precedent,
position=mark
Serializarea
Transformarea datelor n secvene de octei
astfel nct s poat fi transmise pe un flux de
ieire
Deserializare - procesul invers
Scopul serializrii
transmiterea datelor la distan. RMI
conservarea datelor n afara timpului de
execuie. Persistena obiectelor
asigurarea portabilitii datelor sub diverse SO
implementarea tehnologiei bazate pe
componente reutilizabile - Beans
Mecanisme de serializare
Mecanismul implicit de serializare prin implementarea
interfetei Serializable
Serializarea voluntara prin redefinirea metodelor readObject
si writeObject. Semntura exact a metodelor este:
private void readObject(java.io.ObjectInputStream stream)
throws IOException, ClassNotFoundException;
private void writeObject(java.io.ObjectOutputStream stream)
throws IOException
Serializarea explicita utilizand interfata Externalizable
Interfee, clase
ObjectOutputStream
Clasa utilizat pentru construirea fluxurilor de scriere
(serializare)
Constructor:
public ObjectOutputStream(OutputStream out) throws
IOException
Metode pentru scriere obiecte:
public final void writeObject(Object obj) throws IOException
public void defaultWriteObject() throws IOException
ObjectInputStream
Clas utilizat pentru construirea fluxurilor de intrare
(deserializare).
Constructor:
public ObjectInputStream(InputStream in) throws IOException
Metode:
public final Object readObject() throws IOException,
ClassNotFoundException
public void defaultReadObject() throws IOException,
ClassNotFoundException
Externalizable
Interfa utilizat pentru serializarea explicit. Folosirea interfeei
impune existena unui constructor fr parametrii.
Implementarea const n implementarea metodelor:
public void writeExternal(ObjectOutput out) throws
IOException
public void readExternal(ObjectInput in) throws IOException,
ClassNotFoundException
Limbaje:
Limbaje care contin constructii pentru a exprima concepte de
programare paralela
Compilatoare:
compilatoare pentru limbaje paralele
Supercompilatoare: traslateaza cod secvential in cod paralel
Algoritmi:
Dezvoltarea unor noi algoritmi pentru noile arhitecturi paralele
Dezvoltarea de biblioteci
Aplicatii
Aplicatii stiintifice si ingineresti: dinamica fluidelor, stiinta materialelor,
studiul atmosferei, biologie
Aplicatii din economie, stiinte sociale
Inteligenta artificiala: retele neuronale, cautare
Grafica, multimedia, realitate virtuala
Motoare de cautare (AltaVista, Google etc.)
Sistem distribuit
Algoritm paralel = algoritm care permite efectuarea simultana a mai multor operatii
prin descompunerea unei probleme in subprobleme care se executa in paralel pe
mai multe procesoare
Firul de execuie specifica executia secventiala a unui set de instructiuni
Proces: mulime de fire de execuie care se execut ntr-un cadru paralel real sau
simulat
Paralelism logic: 1 procesor N procese.
La un moment dat se executa fizic o actiune corespunzatoare unui singur
proces.
Procesele se desfasoara concurent: se lanseaza instructiunile unui proces
inainte de a se fi terminat executia tuturor instructiunilor corespunzatoare
celorlalte procese
Paralelism fizic: 1 procesor 1 proces.
Metode:
public static Thread currentThread(); // referinta la firul caruia ii apartine
codulcurent
public static int activeCount(); // numarul de fire active
public final ThreadGroup getThreadGroup(); // grupul caruia ii apartine
firul curent
public static int enumerate(Thread[] tarray); // metoda ThreadGroup care
intoarce in tarray referinta la firele din grup
public final int getPriority(); // prioritatea pe o scara [1-10]
public final String getName() ; // numele asociat firului
public final void setName(String name)
public final void setPriority(int newPriority)
Ready
Running
Blocked
Sleeping
Waiting
Dead
Comutarea starilor
Planificarea firelor
preemtiva trecerea automata n execuie a firelor cu priritate mai mare
round-robin execturea firelor dup cuante de timp alocate