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

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:

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_bytesSeqüè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:

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

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