Ideea de stream are la bază crearea unui canal de comunicaţie între două entităţi. Una dintre entităţi este sursa, iar cealaltă destinaţia.
Sursa scrie informaţii în canal, iar destinaţia citeşte aceste date.
Canalul permite trecerea unui flux de date într-o singură direcţie.
Deoarece există două direcţii de comunicare, există două tipuri mari de stream-uri: de intrare (input stream) și de ieșire(output stream).
Un flux care citește date se numește de intrare, iar cel care scrie date se numește de ieșire.
Java oferă mai multe clase și interfețe pentru lucrul cu fluxurile de intrare /ieșire grupate în pachetul în pachetul java.io.
De exemplu, fișierul sursă *.java este stocat într-un fișier text, care poate fi deschis și citit cu orice editor de text, precum Notepad sau alte editoare de programare. În schimb, fișierul *.class, care rezultă după compilarea programului, este un fișier binar, destinat să fie citit și executat de JVM (Java Virtual Machine).
În realitate, calculatorul nu face o diferență clară între fișiere text și fișiere binare, deoarece toate fișierele sunt stocate în format binar. Diferența constă în modul în care aceste date sunt interpretate și utilizate. În cazul fișierelor text, datele sunt codificate astfel încât să reprezinte caractere lizibile pentru utilizator.
Fluxurile de intrare/ieșire bazate pe caractere sunt construite pe baza fluxurilor binare, iar conversia dintre caractere și octeți se face automat. JVM se ocupă de codificarea și decodificarea caracterelor Unicode atunci când acestea sunt citite sau scrise în fișiere. Din acest motiv, fluxurile binare sunt, în general, mai eficiente, deoarece nu necesită conversii suplimentare.
În practică, este recomandat să folosim fluxuri bazate pe caractere atunci când lucrăm cu fișiere text, create de editoare de text, și fluxuri binare atunci când lucrăm cu fișiere binare, generate de programe sau de JVM.
Java oferă mai multe clase și interfețe pentru lucrul cu fluxurile de intrare /ieșire grupate în pachetul în pachetul java.io.
Majoritatea metodelor claselor I/O pot genera excepții care trebuie tratate. Cum ? Studiați aici 👉 Tratarea excepțiilor în Java
Fluxurile de date, atât cele de intrare (citire), cât și cele de ieșire (scriere), pot fi de două tipuri: fluxuri de octeți și fluxuri de caractere.
Pentru a înțelege diferența dintre aceste două tipuri de fluxuri, este bine să facem distincția dintre fișiere text și fișiere binare.
Un fișier text este un fișier al cărui conținut poate fi deschis și modificat cu un editor de text, de exemplu Notepad. În astfel de fișiere informația este salvată sub formă de caractere, iar utilizatorul poate citi direct conținutul.
În schimb, fișierele binare conțin date salvate într-un format special, care nu poate fi interpretat corect de un editor de text. Aceste fișiere sunt create pentru a fi citite și procesate de anumite programe. Exemple de fișiere binare sunt imaginile, fișierele audio, video sau programele executabile.
Fluxurile de date, atât cele de intrare (citire), cât și cele de ieșire (scriere), pot fi de două tipuri: fluxuri de octeți și fluxuri de caractere.
Pentru a înțelege diferența dintre aceste două tipuri de fluxuri, este bine să facem distincția dintre fișiere text și fișiere binare.
Un fișier text este un fișier al cărui conținut poate fi deschis și modificat cu un editor de text, de exemplu Notepad. În astfel de fișiere informația este salvată sub formă de caractere, iar utilizatorul poate citi direct conținutul.
În schimb, fișierele binare conțin date salvate într-un format special, care nu poate fi interpretat corect de un editor de text. Aceste fișiere sunt create pentru a fi citite și procesate de anumite programe. Exemple de fișiere binare sunt imaginile, fișierele audio, video sau programele executabile.
Un exemplu simplu care ilustrează diferența dintre fișiere text și fișiere binare este cel al fișierelor utilizate în Java.
De exemplu, fișierul sursă *.java este stocat într-un fișier text, care poate fi deschis și citit cu orice editor de text, precum Notepad sau alte editoare de programare. În schimb, fișierul *.class, care rezultă după compilarea programului, este un fișier binar, destinat să fie citit și executat de JVM (Java Virtual Machine).
În realitate, calculatorul nu face o diferență clară între fișiere text și fișiere binare, deoarece toate fișierele sunt stocate în format binar. Diferența constă în modul în care aceste date sunt interpretate și utilizate. În cazul fișierelor text, datele sunt codificate astfel încât să reprezinte caractere lizibile pentru utilizator.
Fluxurile de intrare/ieșire bazate pe caractere sunt construite pe baza fluxurilor binare, iar conversia dintre caractere și octeți se face automat. JVM se ocupă de codificarea și decodificarea caracterelor Unicode atunci când acestea sunt citite sau scrise în fișiere. Din acest motiv, fluxurile binare sunt, în general, mai eficiente, deoarece nu necesită conversii suplimentare.
În practică, este recomandat să folosim fluxuri bazate pe caractere atunci când lucrăm cu fișiere text, create de editoare de text, și fluxuri binare atunci când lucrăm cu fișiere binare, generate de programe sau de JVM.
Exemple de clase utilizate pentru fișiere binare: imagini, video, audio, fișiere executabile sau orice tip de date brute:
- FileInputStream: citirea datelor binare din fișier
- FileOutputStream: scrierea datelor binare în fișier
- BufferedInputStream: citire binară mai rapidă
- BufferedOutputStream: scriere binară mai rapidă
- DataInputStream: citirea tipurilor primitive (int, double etc.)
- DataOutputStream: scrierea tipurilor primitive
- ObjectInputStream: citirea obiectelor salvate
- ObjectOutputStream: salvarea obiectelor în fișier
Exemple de clase utilizate pentru fișiere text: .txt, .java, .html, .csv: Un avantaj important al fișierelor binare este că ele sunt independente de schema de codificare a sistemului de operare, ceea ce le face portabile. Astfel, programele Java pot citi fișiere binare create de Java pe orice calculator. Din acest motiv, fișierele *.class sunt fișiere binare și pot fi executate de JVM pe orice sistem care suportă platforma Java.
- FileReader: citirea caracterelor din fișier
- FileWriter: scrierea caracterelor în fișier
- BufferedReader: citirea liniilor de text
- BufferedWriter: scrierea eficientă a textului
- PrintWriter: scriere formatată de text
- CharArrayReader: citirea caracterelor dintr-un tablou
- CharArrayWriter: scrierea caracterelor într-un tablou
Succes!
💓
Niciun comentariu:
Trimiteți un comentariu
Vă mulțumesc pentru feedback!