Differences

This shows you the differences between two versions of the page.

Link to this comparison view

poo-ca-cd:laboratoare:io-si-gestionarea-exceptiilor [2025/11/19 14:03]
florian_luis.micu [📥📤 File I/O - The Basics]
poo-ca-cd:laboratoare:io-si-gestionarea-exceptiilor [2025/11/19 14:12] (current)
florian_luis.micu
Line 519: Line 519:
 Ele constituie fundamentul pentru toate comunicațiile cu **fișiere, resurse media și rețea**. Ele constituie fundamentul pentru toate comunicațiile cu **fișiere, resurse media și rețea**.
  
-====Modalități de scriere și de citire a datelor====+====The Basics====
  
 În Java, lucrăm cu două mari tipuri de fluxuri: În Java, lucrăm cu două mari tipuri de fluxuri:
Line 774: Line 774:
  
  
 +====[Nice to know] File I/O - Advanced====
  
- +===I/O Streams===
-====[Nice to know] I/O Streams====+
  
 Majoritatea operațiilor I/O în Java se bazează pe **fluxuri (streams)**. Majoritatea operațiilor I/O în Java se bazează pe **fluxuri (streams)**.
Line 799: Line 799:
 </​spoiler>​ </​spoiler>​
  
-===InputStream și OutputStream===+==InputStream și OutputStream==
  
 Clasele [[https://​docs.oracle.com/​javase/​8/​docs/​api/​java/​io/​InputStream.html | InputStream]] și [[https://​docs.oracle.com/​javase/​8/​docs/​api/​java/​io/​OutputStream.html | OutputStream]] sunt **abstracte** și definesc interfața de bază pentru toate fluxurile de bytes în Java. Ele oferă metode pentru **citirea și scrierea datelor nestructurate**,​ la nivel de byte. Clasele [[https://​docs.oracle.com/​javase/​8/​docs/​api/​java/​io/​InputStream.html | InputStream]] și [[https://​docs.oracle.com/​javase/​8/​docs/​api/​java/​io/​OutputStream.html | OutputStream]] sunt **abstracte** și definesc interfața de bază pentru toate fluxurile de bytes în Java. Ele oferă metode pentru **citirea și scrierea datelor nestructurate**,​ la nivel de byte.
Line 807: Line 807:
 {{ :​poo-ca-cd:​laboratoare:​io_stream.png?​450 |}} {{ :​poo-ca-cd:​laboratoare:​io_stream.png?​450 |}}
  
-<spoiler [Opțional] Moștenirea claselor InputStream și OutputStream>​+<spoiler [Optional] Moștenirea claselor InputStream și OutputStream>​
 Deoarece toate fluxurile de bytes moștenesc structura claselor InputStream sau OutputStream,​ diferitele tipuri de fluxuri pot fi folosite în mod **interschimbabil**. ​ Deoarece toate fluxurile de bytes moștenesc structura claselor InputStream sau OutputStream,​ diferitele tipuri de fluxuri pot fi folosite în mod **interschimbabil**. ​
  
Line 819: Line 819:
 </​spoiler>​ </​spoiler>​
  
-====[Nice to know] Basic I/O ====+===Basic I/O ===
  
 Input-ul standard pentru o aplicație în Java se bazează pe un obiect de tip ''​InputStream'',​ similar cu ''​stdin''​ din C sau ''​cin''​ din C++. Acesta reprezintă o sursă de date ce provine din environment-ul în care lucrăm: ​ Input-ul standard pentru o aplicație în Java se bazează pe un obiect de tip ''​InputStream'',​ similar cu ''​stdin''​ din C sau ''​cin''​ din C++. Acesta reprezintă o sursă de date ce provine din environment-ul în care lucrăm: ​
Line 861: Line 861:
 </​note>​ </​note>​
  
-====[Nice to know] Character Streams ​====+===Character Streams ===
  
 Pentru că ne dorim să lucrăm cu valori reprezentate ca text, în Java au fost introduse clasele [[https://​docs.oracle.com/​javase/​8/​docs/​api/​java/​io/​Reader.html | Reader]] și [[https://​docs.oracle.com/​javase/​8/​docs/​api/​java/​io/​Writer.html | Writer]] din pachetul ''​java.io''​. ​ Pentru că ne dorim să lucrăm cu valori reprezentate ca text, în Java au fost introduse clasele [[https://​docs.oracle.com/​javase/​8/​docs/​api/​java/​io/​Reader.html | Reader]] și [[https://​docs.oracle.com/​javase/​8/​docs/​api/​java/​io/​Writer.html | Writer]] din pachetul ''​java.io''​. ​
Line 903: Line 903:
 </​note>​ </​note>​
  
-====[Nice to know] Stream Wrappers ​====+===Stream Wrappers ===
  
 Când dorim să facem mai mult decât citirea sau scrierea simplă a octeților sau caracterelor,​ putem folosi **fluxuri de tip filtru**. Când dorim să facem mai mult decât citirea sau scrierea simplă a octeților sau caracterelor,​ putem folosi **fluxuri de tip filtru**.
Line 925: Line 925:
 ''​BufferedInputStream''​ citește anticipat și stochează date într-un buffer, ceea ce **reduce accesările directe la sursa reală** și **îmbunătățește performanța**. ​ ''​BufferedInputStream''​ citește anticipat și stochează date într-un buffer, ceea ce **reduce accesările directe la sursa reală** și **îmbunătățește performanța**. ​
  
-<​spoiler ​[Nice to know] Cum funcționează buffer-ul intern>+<spoiler Cum funcționează buffer-ul intern>
 **La citire**, buffer-ul este o zonă temporară de memorie unde sunt încărcate datele dintr-un flux, de exemplu un fișier. În loc să citim un caracter sau un byte la un moment dat, fluxul preia un bloc mare de date și **îl stochează în buffer**. Apelurile ulterioare la ''​read()''​ iau datele **direct din buffer**, fără a accesa imediat fișierul, ceea ce crește semnificativ performanța operațiilor de citire. Practic, bufferul **reduce numărul de accesări ale sursei de date**. **La citire**, buffer-ul este o zonă temporară de memorie unde sunt încărcate datele dintr-un flux, de exemplu un fișier. În loc să citim un caracter sau un byte la un moment dat, fluxul preia un bloc mare de date și **îl stochează în buffer**. Apelurile ulterioare la ''​read()''​ iau datele **direct din buffer**, fără a accesa imediat fișierul, ceea ce crește semnificativ performanța operațiilor de citire. Practic, bufferul **reduce numărul de accesări ale sursei de date**.
  
Line 970: Line 970:
 Codul nostru este acum optim, dar **doar dacă lucrăm cu STDIN, STDERR și STDOUT**. Dacă vrem să lucrăm cu fișiere avem nevoie de alte clase specializate. Codul nostru este acum optim, dar **doar dacă lucrăm cu STDIN, STDERR și STDOUT**. Dacă vrem să lucrăm cu fișiere avem nevoie de alte clase specializate.
 </​note>​ </​note>​
-====[Nice to know] Clasa File ====+=== Clasa File ===
  
 [[https://​docs.oracle.com/​javase/​8/​docs/​api/​java/​io/​File.html | java.io.File]] oferă un mod de a **accesa informații** despre un fișier sau un director din sistemul de fișiere. [[https://​docs.oracle.com/​javase/​8/​docs/​api/​java/​io/​File.html | java.io.File]] oferă un mod de a **accesa informații** despre un fișier sau un director din sistemul de fișiere.
Line 1024: Line 1024:
 </​note>​ </​note>​
  
-====[Nice to know] File Stream ​====+=== File Stream ===
  
 Acum că ați înțeles ce este un fișier și cum îl puteți reprezenta cu clasa ''​File'',​ este momentul să învățați cum să citiți și să scrieți efectiv date. În Java, pentru lucrul cu fișiere există două fluxuri fundamentale:​ Acum că ați înțeles ce este un fișier și cum îl puteți reprezenta cu clasa ''​File'',​ este momentul să învățați cum să citiți și să scrieți efectiv date. În Java, pentru lucrul cu fișiere există două fluxuri fundamentale:​
Line 1066: Line 1066:
 </​code>​ </​code>​
  
-=== Cum scrieți date într-un fișier? ​===+== Cum scrieți date într-un fișier? ==
  
 Pentru scriere, folosiți ''​FileOutputStream''​. Dacă **fișierul nu există**, acesta este **creat automat**. Dacă **există**,​ conținutul este **suprascris**,​ cu excepția cazului în care folosiți constructorul cu flag-ul ''​append''​ (care va face textul să fie scris în continuare):​ Pentru scriere, folosiți ''​FileOutputStream''​. Dacă **fișierul nu există**, acesta este **creat automat**. Dacă **există**,​ conținutul este **suprascris**,​ cu excepția cazului în care folosiți constructorul cu flag-ul ''​append''​ (care va face textul să fie scris în continuare):​
Line 1089: Line 1089:
 </​code>​ </​code>​
  
-==== ====+=== ===
  
 <note tip> <note tip>
Line 1101: Line 1101:
  
  
-====🎲 [Optional] RandomAccessFile ​====+===[Optional] RandomAccessFile ===
  
 Până acum am discutat despre fluxuri care citesc sau scriu date secvențial,​ de la începutul fișierului până la sfârșit. Dar ce faceți dacă aveți nevoie să accesați direct o anumită poziție/​index din fișier? Pentru asta există clasa [[https://​docs.oracle.com/​javase/​8/​docs/​api/​java/​io/​RandomAccessFile.html|java.io.RandomAccessFile]],​ ce vă permite să citiți și să scrieți date oriunde în fișier. RandomAccessFile implementează interfețele ''​DataInput''​ și ''​DataOutput'',​ ceea ce înseamnă că puteți folosi metodele pentru citirea și scrierea tipurilor primitive Java și a șirurilor, la fel ca în ''​DataInputStream''​ și ''​DataOutputStream''​. Totuși, nu este o subclasă a ''​InputStream''​ sau ''​OutputStream'',​ deoarece oferă acces aleatoriu, nu secvențial. Până acum am discutat despre fluxuri care citesc sau scriu date secvențial,​ de la începutul fișierului până la sfârșit. Dar ce faceți dacă aveți nevoie să accesați direct o anumită poziție/​index din fișier? Pentru asta există clasa [[https://​docs.oracle.com/​javase/​8/​docs/​api/​java/​io/​RandomAccessFile.html|java.io.RandomAccessFile]],​ ce vă permite să citiți și să scrieți date oriunde în fișier. RandomAccessFile implementează interfețele ''​DataInput''​ și ''​DataOutput'',​ ceea ce înseamnă că puteți folosi metodele pentru citirea și scrierea tipurilor primitive Java și a șirurilor, la fel ca în ''​DataInputStream''​ și ''​DataOutputStream''​. Totuși, nu este o subclasă a ''​InputStream''​ sau ''​OutputStream'',​ deoarece oferă acces aleatoriu, nu secvențial.
poo-ca-cd/laboratoare/io-si-gestionarea-exceptiilor.1763553830.txt.gz · Last modified: 2025/11/19 14:03 by florian_luis.micu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0