logo

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.

carattere in lattice
  • 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.

prova catch block in Java

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

char tostring java

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

AspettoFlusso di personaggiFlusso di byte
Tipo di dati gestitoCaratteri Unicode a 16 bit (testo)Dati grezzi a 8 bit (binari)
Le lezioni terminano conLettore/ScrittoreInputStream/OutputStream
Adatto perFile di testo Dati UnicodeFile binari di immagini audio video
ConversioneConverte automaticamente i byte in caratteriNessuna conversione funziona con byte grezzi
EsempiFileReader FileWriterFileInputStream FileOutputStream

Articolo correlato

  • Java IO - Input/Output in Java con esempi