Documente Academic
Documente Profesional
Documente Cultură
Come Into My Trading Room
Come Into My Trading Room
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 oricte fluxuri, orice proces putnd fi att 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
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
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 }//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