logo

Flux de caractères vs flux d'octets en Java

Un flux est un flux continu de données. En Java, les flux d'E/S sont utilisés pour lire à partir de sources d'entrée ou écrire vers des destinations de sortie telles que des fichiers. Ils fournissent un moyen d’accéder aux données de manière séquentielle. Le package java.io comprend des classes permettant de gérer à la fois les flux d'octets et les flux de caractères, ainsi que la conversion entre eux.

  • Flux d'entrée : lit les données de la source. 
  • Flux de sortie : écrit des données vers une destination. 

Quand utiliser Character Stream sur Byte Stream :

En Java, les caractères sont stockés à l'aide des conventions Unicode. Le flux de caractères est utile lorsque nous voulons traiter des fichiers texte. Ces fichiers texte peuvent être traités caractère par caractère. La taille des caractères est généralement de 16 bits.



Quand utiliser Byte Stream plutôt que Character Stream :

Orienté octet lit octet par octet. Un flux d'octets convient au traitement de données brutes telles que des fichiers binaires.

Points clés lors de l’utilisation et du traitement de l’un des flux ci-dessus :

  • Les classes de flux de caractères se terminent généralement par Reader/Writer tandis que les classes de flux d'octets se terminent par InputStream/OutputStream.
  • Les exemples de codes de cet article utilisent des flux sans tampon qui sont moins efficaces. Pour de meilleures performances, nous les enveloppons généralement avec BufferedReader/BufferedWriter (flux de caractères) ou BufferedInputStream/BufferedOutputStream (flux d'octets).
  • Fermez toujours les flux après utilisation pour libérer des ressources et éviter les erreurs.
  • Les codes ci-dessus peuvent ne pas fonctionner dans les compilateurs en ligne car les fichiers peuvent ne pas exister.

Flux de personnages

En Java, les caractères sont stockés à l'aide des conventions Unicode. Le flux de caractères nous permet automatiquement de lire/écrire des données caractère par caractère. Par exemple, FileReader et FileWriter sont des flux de caractères utilisés pour lire depuis la source et écrire vers la destination.

non_unicode_bytes' title=Flux de personnages

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

Sortir:

Écrit le contenu dans le fichier cible caractère par caractère

Programme exécuté avec succès

Flux d'octets

Un flux d'octets en Java est un flux qui gère l'entrée et la sortie de données binaires brutes de 8 bits. Il est principalement utilisé pour lire et écrire des données non textuelles telles que des images audio vidéo ou tout fichier binaire. Par exemple FichierInputStream est utilisé pour lire à partir de la source et FileOutputStream pour écrire vers la destination.

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

Sortir:

Programme exécuté avec succès

Différences entre flux de caractères et flux d’octets

AspectFlux de personnagesFlux d'octets
Type de données géréCaractères Unicode 16 bits (texte)Données brutes 8 bits (binaire)
Les cours se terminent parLecteur / ÉcrivainFlux d'entrée / Flux de sortie
Convient pourFichiers texte Données UnicodeImages fichiers binaires audio vidéo
ConversionConvertit automatiquement les octets en caractèresAucune conversion ne fonctionne avec les octets bruts
ExemplesFileReader FileWriterFileInputStream FileOutputStream

Article connexe

  • Java IO - Entrée/Sortie en Java avec exemples