[Noções básicas de JAVA] Explicação detalhada de IO

[Noções básicas de JAVA] Explicação detalhada de IO

I. Visão geral

Um fluxo é um conjunto sequenciado de bytes com um ponto inicial e um ponto final.É um termo geral ou abstração para transmissão de dados. A transmissão de dados entre dois dispositivos é chamada de fluxo. A essência de um fluxo é a transmissão de dados. O fluxo é abstraído em várias classes de acordo com as características de transmissão de dados para facilitar operações de dados mais intuitivas.

2. O papel do fluxo IO

Realize a transferência de dados entre dois dispositivos de objeto.

3. Cenários de uso do fluxo IO

  1. Quando usamos a classe File, só podemos realizar operações de arquivo, incluindo: obter atributos de arquivo, criar, excluir, mover arquivos, etc., mas não podemos fazer alterações no conteúdo do arquivo. Se quiser operar no conteúdo do arquivo, você precisa ler, excluir o conteúdo do arquivo, etc.
  2. Cenários de uso de fluxos IO: quando você precisa operar no conteúdo de um arquivo.

O objeto de operação do fluxo IO é um arquivo, em vez de ler e gravar uma pasta. Ao usar fluxos IO, tome cuidado para não estabelecer uma conexão com uma pasta.

4. Classificação de fluxos IO

Ele é dividido em diferentes fluxos de IO de acordo com diferentes padrões de classificação:

4.1 Pontos unitários para transmissão de dados:
  • Fluxo de bytes: O que é transmitido são bytes e a unidade são bytes. A unidade mínima para leitura de um fluxo de bytes é um byte (1byte = 8 bits). Pode operar em qualquer tipo de dados.
  • Fluxo de caracteres: O que é transmitido são bytes, e um caractere pode ser lido por vez (1char = 2byte = 16bit), a diferença é que a operação de codificação é adicionada durante o processo de transmissão, tornando nossa operação mais conveniente.
4.2 Direção de transmissão de dados:
  • **Entrada de fluxo de entrada:** Ler dados externos (dados de dispositivos de armazenamento, como discos e discos ópticos) no programa (memória)
  • **Saída de fluxo de saída:** Saída de dados do programa (memória) para dispositivos de armazenamento, como discos e discos ópticos
4.3 Diferentes funções do fluxo:
  • Fluxo de nó: um fluxo que lê e grava dados diretamente de uma fonte (esse fluxo não é empacotado ou modificado).O fluxo de processamento é um fluxo baseado no encapsulamento do fluxo do nó. FileInputStream é um fluxo de nó que pode ler dados diretamente de um arquivo, mas BufferedInputStream pode agrupar FileInputStream para que ele tenha função de buffer.
  • Fluxo de processamento: é usado para conectar e encapsular um fluxo de nó existente e realizar os recursos de leitura e gravação do fluxo por meio do fluxo encapsulado. Ao usar fluxos de processamento, o programa não se conecta diretamente à fonte de dados real, mas sim a um fluxo existente.

5. Sistema de fluxo IO

Classificação Fluxo de entrada de bytes Fluxo de saída de bytes fluxo de entrada de caracteres fluxo de saída de caracteres
classe base abstrata Fluxo de entrada Fluxo de saída Leitor Escritor
acessar arquivos FileInputStream FileOutputStream Leitor de arquivos Escritor externo
matriz de acesso ByteArrayInputStream ByteArrayOutputStream CharArrayReader CharArrayWriter
tubo de acesso PipedInputStream PipedOutputStream Leitor canalizado PipeWriter
sequência de acesso Leitor de entradaStream OutputStreamWriter
fluxo em buffer BufferedInputStream BufferedOutputStream Leitor Buffered BufferedWriter
Fluxo de conversão Leitor de entradaStream SaídaSteamReader
fluxo de objetos ObjectInputStream ObjectOutputStream
FilterInputStream FilterOutputStream Leitor de Filtro FiltroWriter
fluxo de impressão ImprimirStream Gravador de impressão
Empurre o fluxo de entrada PushbackInputStream Leitor Pushback
fluxo especial DataInputStream DataOutputStream

6. Fluxo de entrada de bytes InputStream

InputStream é uma classe virtual, que é um fluxo de entrada de caracteres em Java, usado para ler dados de arquivos em programas Java.

O método mais comumente usado é: FileInputStream

  • Métodos comuns

    1. int read(): lê um byte de dados do arquivo. E retorne o byte lido. Se a leitura for concluída, o valor de retorno será -1;
    2. int read(byte[] b): Lê um array de bytes por vez. O fluxo de entrada colocará o conteúdo lido neste array de bytes e retornará o número de leitura. Se a leitura for concluída, -1 será retornado. ;
    3. void close(); fecha o fluxo de bytes;
  • Etapas de implementação de FileInputStream

    1. Crie um objeto de fluxo FileInputStream e vincule um arquivo de fonte de dados
    2. Chame o método read para ler dados
    3. Liberar recursos
  • Código de amostra

    public  void inputStreamMethod() throws Exception  {
          
          
         FileInputStream in=new FileInputStream("D:\\goyeer.txt");
         //创建Fileinptstream 流对象,并绑定源文件
         byte[] buf=new byte[1024];
         int len;
         //调用read方法读取数据
         while((len=in.read(buf))!= -1){
          
          
             String line=new String(buf,0,len,"UTF-8");
             System.out.println(line);
         }
    }
    
  • Sistema InputStream
    Insira a descrição da imagem aqui

7. Fluxo de saída de bytes OutputStream

A classe OutputStream é a classe base para todos os fluxos de saída na API Java IO. As subclasses incluem BufferedOutputStream, FileOutputStream, etc. OutputStream é um modo de decoração típico, que pode ser subclassificado diretamente quando usado. OutputStream pode enviar para console, arquivos, discos e outras mídias de destino.

  • Métodos comuns

    1. void close(); Fecha o fluxo de saída para evitar que os recursos sejam muito ocupados, o que pode eventualmente levar ao estouro de manipulação ou de memória.
    2. void write(int b); o único método abstrato em uma classe abstrata. Subclasses não abstratas devem implementar este método.
    3. void write(byte b[]) gera diretamente todo o conteúdo de uma matriz de bytes.
    4. void write(byte b[], int off, int len) O conteúdo a ser gerado foi armazenado na matriz de bytes b[], mas nem todo ele é gerado. Somente len bytes começando na posição off da matriz são saída.
    5. void exuberante() libera o fluxo de saída e gera todos os bytes em buffer. Como alguns fluxos suportam cache, esse método forçará a saída de todo o conteúdo do cache para o fluxo.
  • Etapas de implementação do OutputStream

    1. Crie um objeto de fluxo OutputStream
    2. escrever entrada do método
    3. close fecha o fluxo para evitar estouro de memória
  • Código de amostra

     public void outputStreamMethod() throws IOException{
          
          
            OutputStream ou=new FileOutputStream("D:\\ShowCoding.txt");
            String str = "欢迎Goyeer社区";
            byte[] bytes = str.getBytes();
            for(int i = 0; i < bytes.length; i++) {
          
          
                ou.write(bytes[i]);
            }
            ou.close();
      }
    
  • Sistema OutputStream
    Insira a descrição da imagem aqui

8. Leitor de fluxo de entrada de caracteres

Reader é a classe pai do fluxo de caracteres de entrada. É uma classe abstrata e não é recomendada para leitura e gravação de arquivos.

  • Métodos comuns

    1. void close(); Fecha o stream e libera todos os recursos associados a ele;
    2. void mark(int readAheadLimit); marca a posição atual no stream;
    3. boolean markSupported(); determina se este fluxo suporta a operação mark();
    4. int read(); lê um único caractere;
    5. int read(char[] cbuf); Ler caracteres no array;
    6. int read(char[] cbuf, int off, int len); Lê caracteres em uma determinada parte do array;
    7. int read(CharBuffer target) ;Tenta ler caracteres no buffer de caracteres especificado
    8. boolean ready() ; Determine se este fluxo está pronto para ser lido;
    9. void reset();Redefinir o fluxo
    10. salto longo(n longo); pular caracteres
  • Etapas de implementação do leitor

    1. Cria um objeto de fluxo de leitura de arquivo associado ao arquivo com o nome especificado; é garantido que o arquivo exista. Quando o arquivo não existe, ocorre uma exceção (FileNotFoundException);
    2. Chame o método read do objeto de fluxo de leitura para ler um caractere por vez e ler automaticamente os caracteres subsequentes;
    3. Chame o método para fechar o fluxo de caracteres;
  • Código de amostra

    public static void readerMethod() throws IOException{
          
          
        Reader reader=new FileReader("D:\\goyeer.txt");
        int ch = 0;
        char [] buf= new char[1024];
        while((ch=reader.read(buf))!=-1){
          
          
             System.out.print(new String(buf,0,ch));
        }
        reader.close();
    }
    
  • Sistema leitor
    Insira a descrição da imagem aqui

9. Escritor do processo de saída de caracteres

A classe Writer é a classe base de todos os Writers em Java IO. É uma classe abstrata localizada no pacote java.io. Implemente subclasses que implementam o Writer, incluindo BufferedWriter e PrintWriter.

  • Métodos comuns

    1. Writerappend(char c) adiciona o caractere especificado a esta gravação
    2. Writerappend(CharSequence csq) adiciona a sequência de caracteres especificada a este escritor
    3. Writerappend(CharSequence csq, int start, int end) adiciona uma subsequência da sequência de caracteres especificada a este escritor.Appendable
    4. abstract void close() fecha este fluxo, mas libera-o primeiro
    5. abstract void flush() atualiza o buffer deste fluxo
    6. void write(char[] cbuf) escreve array de caracteres
    7. abstract void write(char[] cbuf, int off, int len) grava uma determinada parte do array de caracteres
    8. void write(int c) escreve um único caractere
    9. void write(String str) escreve string
    10. void write(String str, int off, int len) escreve uma determinada parte da string
  • Etapas de implementação do escritor

    1. Instanciar o Writer via subclasse
    2. Implementar operações de gravação de arquivos por meio do método write
    3. close fecha o fluxo de saída e libera recursos.
  • Código de amostra

    public static  void writeMethod() throws IOException {
          
          
       Writer out = new FileWriter("D:\\goyeer.log");
       String str = "I/O字符流,Writer类应用。";        
       out.write(str);
       out.close();
    }
    
  • Sistema escritor
    Insira a descrição da imagem aqui

10. Resumo

Java IO é o sistema de entrada e saída Java, ou seja, entrada e saída, que se refere à transferência de dados entre aplicativos e dispositivos externos.Dispositivos externos comuns incluem arquivos, canais e conexões de rede. Ao escrever um programa, escolha o fluxo de bytes e o fluxo de caracteres adequados ao seu cenário e use subclasses abstratas de maneira flexível.

Acho que você gosta

Origin blog.csdn.net/songjianlong/article/details/132443181
Recomendado
Clasificación