Flusso di caratteri e flusso di byte in Java

Flusso di caratteri e flusso di byte in Java

Uno stream è un flusso continuo di dati. In Java i flussi I/O vengono utilizzati per leggere da origini di input o scrivere su destinazioni di output come file. Forniscono un modo per accedere ai dati in sequenza. Il pacchetto java.io include classi per gestire sia flussi di byte che flussi di caratteri e anche per la conversione tra di loro.

  • Flusso di ingresso: legge i dati dalla sorgente. 
  • Flusso di output: scrive i dati in una destinazione. 

Quando utilizzare il flusso di caratteri su quello di byte:

In Java i caratteri vengono memorizzati utilizzando le convenzioni Unicode. Il flusso di caratteri è utile quando vogliamo elaborare file di testo. Questi file di testo possono essere elaborati carattere per carattere. La dimensione dei caratteri è generalmente di 16 bit.



Quando utilizzare il flusso di byte rispetto al flusso di caratteri:

L'orientamento al byte legge byte per byte. Un flusso di byte è adatto per elaborare dati grezzi come file binari.

Punti chiave durante l'utilizzo e la gestione di uno qualsiasi dei flussi di cui sopra:

  • Le classi del flusso di caratteri solitamente terminano con Reader/Writer mentre le classi del flusso di byte terminano con InputStream/OutputStream.
  • I codici di esempio in questo articolo utilizzano flussi senza buffer che sono meno efficienti. Per prestazioni migliori li avvolgiamo comunemente con BufferedReader/BufferedWriter (flussi di caratteri) o BufferedInputStream/BufferedOutputStream (flussi di byte).
  • Chiudi sempre i flussi dopo l'uso per liberare risorse ed evitare errori.
  • I codici di cui sopra potrebbero non essere eseguiti nei compilatori online poiché i file potrebbero non esistere.

Flusso di personaggi

In Java i caratteri vengono memorizzati utilizzando le convenzioni Unicode. Il flusso di caratteri ci consente automaticamente di leggere/scrivere i dati carattere per carattere. Ad esempio FileReader e FileWriter sono flussi di caratteri utilizzati per leggere dall'origine e scrivere nella destinazione.

non_unicode_bytesFlussi di personaggi

Esempio

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

Produzione:

Scrive il contenuto nel file di destinazione carattere per carattere

Programma eseguito con successo

Flusso di byte

Un flusso di byte in Java è un flusso che gestisce l'input e l'output di dati binari grezzi a 8 bit. Viene utilizzato principalmente per leggere e scrivere dati non di testo come immagini audio video o qualsiasi file binario. Per esempio FileInputStream viene utilizzato per leggere dall'origine e FileOutputStream per scrivere nella destinazione.

Esempio:

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

Produzione:

Programma eseguito con successo

Differenze tra flusso di caratteri e flusso di byte

Aspetto Flusso di personaggi Flusso di byte
Tipo di dati gestito Caratteri Unicode a 16 bit (testo) Dati grezzi a 8 bit (binari)
Le lezioni terminano con Lettore/Scrittore InputStream/OutputStream
Adatto per File di testo Dati Unicode File binari di immagini audio video
Conversione Converte automaticamente i byte in caratteri Nessuna conversione funziona con byte grezzi
Esempi FileReader FileWriter FileInputStream FileOutputStream

Articolo correlato

  • Java IO - Input/Output in Java con esempi

Articoli Più

Categoria

Articoli Interessanti