Un flux és un flux continu de dades. A Java, els fluxos d'E/S s'utilitzen per llegir des de fonts d'entrada o escriure a destinacions de sortida, com ara fitxers. Proporcionen una manera d'accedir a les dades de manera seqüencial. El paquet java.io inclou classes per gestionar tant fluxos de bytes com fluxos de caràcters i també per convertir-los entre ells.
- Seqüència d'entrada: llegeix dades de la font.
- Seqüència de sortida: escriu dades a una destinació.
Quan utilitzar el flux de caràcters sobre el flux de bytes:
unió de cadena java
A Java, els caràcters s'emmagatzemen mitjançant les convencions Unicode. El flux de caràcters és útil quan volem processar fitxers de text. Aquests fitxers de text es poden processar caràcter a caràcter. La mida dels caràcters sol ser de 16 bits.
Quan s'ha d'utilitzar Byte Stream sobre Character Stream:
Orientat per byte llegeix byte per byte. Un flux de bytes és adequat per processar dades en brut com fitxers binaris.
Punts clau durant l'ús i el tractament de qualsevol dels fluxos anteriors:
- Les classes de flux de caràcters solen acabar amb Reader/Writer mentre que les classes de flux de bytes acaben amb InputStream/OutputStream.
- Els codis d'exemple d'aquest article utilitzen fluxos sense memòria intermèdia que són menys eficients. Per obtenir un millor rendiment, normalment els embolcallem amb BufferedReader/BufferedWriter (flujos de caràcters) o BufferedInputStream/BufferedOutputStream (flujos de bytes).
- Tanqueu sempre els fluxos després del seu ús per alliberar recursos i evitar errors.
- És possible que els codis anteriors no s'executin als compiladors en línia ja que els fitxers poden no existir.
Seqüència de personatges
A Java, els caràcters s'emmagatzemen mitjançant les convencions Unicode. El flux de caràcters ens permet llegir/escriure automàticament dades caràcter per caràcter. Per exemple, FileReader i FileWriter són fluxos de caràcters utilitzats per llegir des de la font i escriure a la destinació.
Seqüències de caràctersExemple
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(); } } }
Sortida:
bin a bcd
Escriu contingut al fitxer de destinació caràcter per caràcter
Programa executat correctament
Flux de bytes
Un flux de bytes a Java és un flux que gestiona l'entrada i sortida de dades binàries de 8 bits en brut. S'utilitza principalment per llegir i escriure dades que no són de text, com ara imatges, vídeo d'àudio o qualsevol fitxer binari. Per exemple FileInputStream s'utilitza per llegir des de la font i FileOutputStream per escriure a la destinació.
Exemple:
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(); } } }
Sortida:
Programa executat correctament
Diferències entre el flux de caràcters i el flux de bytes
| Aspecte | Seqüència de personatges | Flux de bytes |
|---|---|---|
| Tipus de dades gestionades | Caràcters Unicode de 16 bits (text) | Dades en brut de 8 bits (binaris) |
| Les classes acaben amb | Lector/Escriptor | InputStream / OutputStream |
| Apte per | Fitxers de text Dades Unicode | Imatges de fitxers binaris d'àudio i vídeo |
| Conversió | Converteix bytes en caràcters automàticament | Cap conversió no funciona amb bytes en brut |
| Exemples | FileReader FileWriter | FileInputStream FileOutputStream |
Article relacionat
- Java IO - Entrada/sortida en Java amb exemples