logo

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_bytes' title=Fluxuri 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

AspectFlux de caractereFlux de octeți
Tipul de date tratatCaractere Unicode pe 16 biți (text)Date brute pe 8 biți (binare)
Cursurile se termină cuCititor/ScriitorInputStream / OutputStream
Potrivit pentruFișiere text Date UnicodeImagini fișiere binare audio video
ConversieConvertește automat octeții în caractereNicio conversie nu funcționează cu octeți bruti
ExempleFileReader FileWriterFileInputStream FileOutputStream

Articol înrudit

  • Java IO - Intrare/Ieșire în Java cu exemple