Fluxo de caracteres versus fluxo de bytes em Java
Um fluxo é um fluxo contínuo de dados. Em Java, os fluxos de E/S são usados para ler fontes de entrada ou gravar em destinos de saída, como arquivos. Eles fornecem uma maneira de acessar dados sequencialmente. O pacote java.io inclui classes para lidar com fluxos de bytes e fluxos de caracteres e também para conversão entre eles.
- Fluxo de entrada: lê dados da fonte.
- Fluxo de saída: grava dados em um destino.
Quando usar o fluxo de caracteres em vez do fluxo de bytes:
Em Java, os caracteres são armazenados usando convenções Unicode. O fluxo de caracteres é útil quando queremos processar arquivos de texto. Esses arquivos de texto podem ser processados caractere por caractere. O tamanho dos caracteres é normalmente de 16 bits.
Quando usar o fluxo de bytes em vez do fluxo de caracteres:
Orientado a bytes lê byte por byte. Um fluxo de bytes é adequado para processar dados brutos, como arquivos binários.
Pontos-chave ao usar e lidar com qualquer um dos fluxos acima:
- As classes de fluxo de caracteres geralmente terminam com Reader/Writer, enquanto as classes de fluxo de bytes terminam com InputStream/OutputStream.
- Os códigos de exemplo neste artigo usam fluxos sem buffer que são menos eficientes. Para melhor desempenho, geralmente os agrupamos com BufferedReader/BufferedWriter (fluxos de caracteres) ou BufferedInputStream/BufferedOutputStream (fluxos de bytes).
- Sempre feche os fluxos após o uso para liberar recursos e evitar erros.
- Os códigos acima podem não funcionar em compiladores online porque os arquivos podem não existir.
Fluxo de caracteres
Em Java, os caracteres são armazenados usando convenções Unicode. O fluxo de caracteres nos permite ler/gravar dados caractere por caractere automaticamente. Por exemplo, FileReader e FileWriter são fluxos de caracteres usados para ler da origem e gravar no destino.
Fluxos de personagens Exemplo
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 (); } } }
Saída:
Grava conteúdo no arquivo de destino caractere por caractere
Programa executado com sucesso
Fluxo de bytes
Um fluxo de bytes em Java é um fluxo que lida com entrada e saída de dados binários brutos de 8 bits. É usado principalmente para ler e gravar dados não textuais, como imagens, áudio e vídeo ou qualquer arquivo binário. Por exemplo FileInputStream é usado para ler a origem e FileOutputStream para gravar no destino.
Exemplo:
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 (); } } }
Saída:
Programa executado com sucesso
Diferenças entre fluxo de caracteres e fluxo de bytes
| Aspecto | Fluxo de caracteres | Fluxo de bytes |
|---|---|---|
| Tipo de dados manipulado | Caracteres Unicode de 16 bits (texto) | Dados brutos de 8 bits (binário) |
| As aulas terminam com | Leitor/Escritor | InputStream / OutputStream |
| Adequado para | Arquivos de texto Dados Unicode | Imagens arquivos binários de áudio e vídeo |
| Conversão | Converte bytes em caracteres automaticamente | Nenhuma conversão funciona com bytes brutos |
| Exemplos | FileReaderFileWriter | FileInputStream |
Artigo relacionado
- Java IO - Entrada/Saída em Java com exemplos