Fluxuri

Fluxurile Java pun la dispozi]ie modalitatea prin care dou\ sau mai multe procese pot comunica f\r\ a avea informa]ii unul despre cel\lalt. Mai mult, prin fluxuri este posibil\ comunicarea între dou\ sau mai multe fire de execu]ie ale aceleia[i aplica]ii. Fluxurile sunt secven]e de octe]i (8 bi]i). Proces produc\tor → flux de ie[ire → Proces consumator Proces consumator ← flux de intrare ← Proces produc\tor • fluxurile sunt unidirec]ionale, de la produc\tor la consumator • fiecare flux are un singur proces produc\tor [i un singur proces consumator • între dou\ procese pot exista oricâte fluxuri, orice proces putând fi atât produc\tor [i consumator în acela[i timp, dar pe fluxuri diferite • consumatorul [i produc\torul nu comunic\ direct printr-o interfa]\ de flux ci prin intermediul codului Java de tratare a fluxurilor Importan]a : ajut\ la citirea scrierea informa]iilor in dispozitive de intrare/ie[ire, fi[iere, baze de date, etc. Toate interfe]ele pentru fluxuri implementeaz\ un set de metode de baz\, comune tuturor categoriilor de fluxuri. Metodele standard pentru lucrul cu fluxuri se g\sesc\ în pachetul java.io.

Fluxuri de intrare
BufferedInputStream ByteArrayInputStream DataInputStream FileInputStream FilterInputStream InputStream cite[te datele dintr-un buffer cite[te octe]ii de date într-o matrice de octe]i cite[te dintr-un flux de intrare obiecte, nu [iruri de octe]i cite[te date dintr-un fi[ier

1

LineNumberInputStream PipedInputStream PushBackInputStream SequenceInputStream StringBufferInputStream

A. Metode care func]ioneaz\ cu toate fluxurile de intrare : • read() - cite[te date dintr-un flux de intrare • skip() - ignor\ unele date din fluxul de intrare • markAvailable() - testeaz\ dac\ metoda mark() este disponibil\ pentru fluxul de intrare respectiv • close() - închide un flux de intrare B. Metode a c\ror func]ionare nu este garantat\ pentru toate fluxurile de intrare : • available() - determin\ cantitatea de date disponibile într-un flux de intrare • mark() - marcheaz\ în fluxul de intrare un punct la care se poate reveni ulterior • reset() - revine la un punct dpecificat în fluxul de intrare Read
int read (); int read (byte[] buffer) int read (byte[] buffer, int offset, int length)

Skip Exemplu:
long skip (long numar_octeti) public long skipRecords(int num) { int recordSize = 512 ; long retCode = 0 ; try { //sare peste num inregistrari retCode = MyStream.skip(num * recordSize); //calc nr. de inregistrari peste care a sarit if retCode > 0 { retCode /= recordSize ; } catch (IOException e) { System.out.println.(“Eroare de intrare/iesire!”); }
2

return (retCode); }

Close - închide un flux de intrare (Java închide automat fluxurile la terminarea aplica]iei)
void close();

Exemplu:
public long closeStream() { try MyStream.close() catch (IOException e) { System.out.println(“Eroare la inchiderea fluxului”); } }

Available - determin\ dac\ o anumit\ cantitate de date poate fi citit\ f\r\ blocarea fluxului de intrare.
int available()

Returneaz\ nr. de octe]i ce pot fi citi]i din fluxul de intrare f\r\ blocare. Exemplu:
public boolean isRecordReady() { int recordSize = 512 ; boolean ret = false ; try { if (MyStream.available() >= recordSize) ret = true; } catch (IOException e) { ... } return ret; }

Fluxuri de ie[ire
Clase pentru fluxuri de ie[ire :
• • • • • • • • FileOuputStream BufferedOutputStream ByteArrayOutputStream DataOutputStream FilterOutputStream OutputStream PipedOutputStream PrintStream

3

Metode pentru fluxurile de ie[ire • write() - scrie date într-un flux de ie[ire • flush() - for]eaz\ scrierea datelor într-un canal de redirectare • close() - închide un flux de ie[ire Write
int write (); int write (byte[] buffer) int write (byte[] buffer, int offset, int length)

Flush - for]eaz\ scrierea c\tre dispozitivul de ie[ire a datelor stocate în zona tampon pentru un flux de ie[ire.
void flush();

Close - închide un flux de ie[ire (Java închide automat fluxurile la terminarea aplica]iei)
void close();

RECOMANDARE: Operatiile read/write se recomand\ a fi f\cute în fire de execu]ie separate care s\ nu blocheze programul.
import java.io.*; public class TestFlux { public static void main(String args[]) { FileInputStream s,sursa; //s este flux de intrare FileOutputStream dest; //dest este flux de iesire int octet; try { sursa = new FileInputStream(args[0]); try { dest = new FileOutputStream(args[1]); octet = 0; //citesc fisierul caracter cu caracter while (octet != -1) { try { octet = sursa.read(); dest.write(octet); System.out.print((char)octet); } catch (IOException e) { System.out.println("Eroare de intrare/iesire"); System.exit(2); } } //while

4

}//try catch (IOException e) { System.out.println("Fisierul " + args[1] + " nu a putut fi creat !"); System.exit(2); } }//try catch (FileNotFoundException e) { System.out.println("Fisierul " + args[0] + " nu a fost gasit !"); System.exit(1); } }//main }//class

5

Sign up to vote on this title
UsefulNot useful