logo

Seqüència de caràcters vs flux de bytes a Java

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ó.

no_unicode_bytes' title=Seqüències de caràcters

Exemple

Java
import 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:

Java
import 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

AspecteSeqüència de personatgesFlux de bytes
Tipus de dades gestionadesCaràcters Unicode de 16 bits (text)Dades en brut de 8 bits (binaris)
Les classes acaben ambLector/EscriptorInputStream / OutputStream
Apte perFitxers de text Dades UnicodeImatges de fitxers binaris d'àudio i vídeo
ConversióConverteix bytes en caràcters automàticamentCap conversió no funciona amb bytes en brut
ExemplesFileReader FileWriterFileInputStream FileOutputStream

Article relacionat

  • Java IO - Entrada/sortida en Java amb exemples