Un flux este un flux continuu de date. În Java, fluxurile I/O sunt folosite pentru a citi din sursele de intrare sau pentru a scrie în destinații de ieșire, cum ar fi fișierele. Ele oferă o modalitate de a accesa datele secvenţial. Pachetul java.io include clase pentru gestionarea atât a fluxurilor de octeți, cât și a fluxurilor de caractere și, de asemenea, pentru conversia între ele.
- Flux de intrare: citește datele din sursă.
- Flux de ieșire: scrie date la o destinație.
Când să utilizați fluxul de caractere peste fluxul de octeți:
În Java, caracterele sunt stocate folosind convențiile Unicode. Fluxul de caractere este util atunci când dorim să procesăm fișiere text. Aceste fișiere text pot fi procesate caracter cu caracter. Dimensiunea caracterelor este de obicei de 16 biți.
Când să folosiți Byte Stream peste Character Stream:
Orientat octet citește octet cu octet. Un flux de octeți este potrivit pentru procesarea datelor brute precum fișierele binare.
Puncte cheie atunci când utilizați și tratați cu oricare dintre fluxurile de mai sus:
- Clasele de flux de caractere se termină de obicei cu Reader/Writer, în timp ce clasele de flux de octeți se termină cu InputStream/OutputStream.
- Exemplele de coduri din acest articol folosesc fluxuri fără tampon care sunt mai puțin eficiente. Pentru o performanță mai bună, le împachetăm de obicei cu BufferedReader/BufferedWriter (fluxuri de caractere) sau BufferedInputStream/BufferedOutputStream (fluxuri de octeți).
- Închideți întotdeauna fluxurile după utilizare pentru a elibera resurse și pentru a preveni erorile.
- Este posibil ca codurile de mai sus să nu ruleze în compilatoarele online, deoarece fișierele ar putea să nu existe.
Flux de caractere
În Java, caracterele sunt stocate folosind convențiile Unicode. Fluxul de caractere ne permite automat să citim/scriem date caracter cu caracter. De exemplu, FileReader și FileWriter sunt fluxuri de caractere folosite pentru a citi de la sursă și a scrie la destinație.
Fluxuri de caractereExemplu
Javaimport java.io.*; public class GFG { public static void main(String[] args) throws IOException { // Initially assigning null as we have not read anything FileReader sourceStream = null; try { // Reading from file sourceStream = new FileReader('/Users/mayanksolanki/Desktop/demo.rtf'); // Reading sourcefile and writing content to target file character by character. int temp; // If there is content inside file than read while ((temp = sourceStream.read()) != -1) System.out.println((char)temp); System.out.print('Program successfully executed'); } finally { if (sourceStream != null) sourceStream.close(); } } }
Ieșire:
Scrie conținut în fișierul țintă caracter cu caracter
Programul a fost executat cu succes
Flux de octeți
Un flux de octeți în Java este un flux care gestionează intrarea și ieșirea datelor binare brute de 8 biți. Este folosit în principal pentru citirea și scrierea de date non-text, cum ar fi imagini audio video sau orice fișier binar. De exemplu FileInputStream este folosit pentru a citi din sursă și FileOutputStream pentru a scrie la destinație.
Exemplu:
Javaimport java.io.*; public class GFG { public static void main(String[] args) throws IOException { // Initially assigning null ot objects for reading and writing to file FileInputStream sourceStream = null; FileOutputStream targetStream = null; try { // Passing the files via local directory sourceStream = new FileInputStream('/Users/mayanksolanki/Desktop/demo.rtf'); targetStream = new FileOutputStream('/Users/mayanksolanki/Desktop/democopy.rtf'); // Reading source file and writing content to file byte by byte int temp; // If there is content inside file than read while ((temp = sourceStream.read()) != -1) targetStream.write((byte)temp); System.out.print('Program successfully executed'); } // finally block that executes for sure where we are closing file connections to avoid memory leakage finally { if (sourceStream != null) sourceStream.close(); if (targetStream != null) targetStream.close(); } } }
Ieșire:
Programul a fost executat cu succes
Diferențele dintre fluxul de caractere și fluxul de octeți
| Aspect | Flux de caractere | Flux de octeți |
|---|---|---|
| Tipul de date tratat | Caractere Unicode pe 16 biți (text) | Date brute pe 8 biți (binare) |
| Cursurile se termină cu | Cititor/Scriitor | InputStream / OutputStream |
| Potrivit pentru | Fișiere text Date Unicode | Imagini fișiere binare audio video |
| Conversie | Convertește automat octeții în caractere | Nicio conversie nu funcționează cu octeți bruti |
| Exemple | FileReader FileWriter | FileInputStream FileOutputStream |
Articol înrudit
- Java IO - Intrare/Ieșire în Java cu exemple