Flux de caractere vs flux de octeți în Java

Flux de caractere vs flux de octeți în Java

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.

non_unicode_bytesFluxuri de caractere

Exemplu

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  ();      }      }   }   

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:

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  ();      }      }   }   

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