logo

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.



substitua a string em java

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.

não_unicode_bytes' title=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:

tipos de loop for

Programa executado com sucesso

Diferenças entre fluxo de caracteres e fluxo de bytes

AspectoFluxo de caracteresFluxo de bytes
Tipo de dados manipuladoCaracteres Unicode de 16 bits (texto)Dados brutos de 8 bits (binário)
As aulas terminam comLeitor/EscritorInputStream / OutputStream
Adequado paraArquivos de texto Dados UnicodeImagens arquivos binários de áudio e vídeo
ConversãoConverte bytes em caracteres automaticamenteNenhuma conversão funciona com bytes brutos
ExemplosFileReaderFileWriterFileInputStream

Artigo relacionado

  • Java IO - Entrada/Saída em Java com exemplos