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.
Fluxos de personagensExemplo
Javaimport 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:
Javaimport 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
| 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