Java IO (BIO) Resumo

        Os fluxos IO geralmente existem em pares, com entrada (Input) e saída (Output), que é o processo de transferência de dados de um lugar para outro; para computadores, o processo de cópia de arquivos, a gravação e salvamento de arquivos e a exibição funções são todas IO é usado; o processo de transmissão de dados é considerado como uma entrada e saída.

        Java IO, também conhecido como BIO (Blocking IO), é um modelo de IO fornecido pelo Java nos primeiros dias. É um IO bloqueante, ou seja, ao realizar uma operação de IO, a thread ficará bloqueada até que a operação de IO seja concluída. A introdução principal aqui é o modelo BIO.

Classificação IO:

        De acordo com a direção do fluxo:

  •         Fluxo de entrada (entrada)
  •         Fluxo de saída (saída)

        De acordo com o tipo de fluxo de processamento: 

  •         fluxo de bytes (byte)
  •         fluxo de caracteres (char)

        De acordo com a função de fluxo:  

  •         Fluxo de nó (interagir diretamente com fontes de entrada e saída)
  •         Fluxos de processamento (fluxos que envolvem outros fluxos: fluxos de empacotamento)

 

fluxo de bytes: 

        InputStream é a superclasse de todos os fluxos de entrada de bytes, que fornece métodos básicos para leitura de dados de bytes. OutputStream é a superclasse de todos os fluxos de saída de bytes, que fornece métodos básicos para gravar dados de bytes.

  • FileInputStream/FileOutputStream :Um fluxo de bytes para leitura e gravação de arquivos. Eles permitem que dados de bytes sejam lidos ou gravados em um arquivo
  • ByteArrayInputStream/ByteArrayOutputStream :Um fluxo para ler e gravar matrizes de bytes na memória.
  • BufferedInputStream/BufferedOutputStream :Fornece entrada e saída com função de buffer, que pode melhorar a eficiência da operação IO
  • ObjectInputStream/ObjectOutputStream : Um fluxo para leitura e gravação de objetos Java. Eles podem serializar objetos Java em fluxos de bytes ou desserializar fluxos de bytes em objetos Java
  • PipedInputStream/PipedOutputStream:  fluxos de pipeline para comunicação entre threads, eles fornecem um mecanismo para transferência de dados entre vários threads. PipedInputStream recebe dados de PipedOutputStream.
    PipedOutputStream output = new PipedOutputStream();
    // 订阅output
    PipedInputStream input = new PipedInputStream(output); 
    
  • PrintStream: fluxo de impressão de bytes

Fluxo de caracteres: 

        Reader/Writer: Reader é a superclasse de todos os fluxos de entrada de caracteres, que fornece métodos básicos para leitura de dados de caracteres. Writer é a superclasse de todos os fluxos de saída de caracteres, que fornece métodos básicos para gravar dados de caracteres.

  • InputStreamReader/OutputStreamWriter :Um fluxo de ponte para converter um fluxo de bytes em um fluxo de caracteres. Eles convertem dados de bytes em dados de caracteres especificando uma codificação de caracteres.
  • FileReader/FileWriter :Um fluxo de caracteres para leitura e gravação de arquivos. Eles permitem que dados de caracteres sejam lidos ou gravados em um arquivo. Eles são implementações de fluxo de caracteres baseadas em FileInputStream e FileOutputStream.
  • BufferedReader/BufferedWriter:Um fluxo de caracteres que fornece funcionalidade de buffer. Eles podem melhorar a eficiência da leitura e gravação de fluxos de caracteres e reduzir o número de operações de E/S reais no sistema subjacente.
  • CharArrayReader/CharArrayWriter:Usado para ler e gravar dados de matriz de caracteres.
  • PipedReader/PipedWriter:Operações de fluxo de caracteres em fluxos canalizados.
  • PrintWriter:fluxo de impressão de personagem

fluxo em buffer

        A eficiência do fluxo em buffer é maior que a dos fluxos de caracteres comuns e fluxos de bytes, porque no kernel do Linux, somente quando a informação gravada no buffer pelo fluxo em buffer atinge um certo limite ou quando o fluxo em buffer é atualizado, ele realmente gravados nas informações do disco, enquanto os fluxos comuns gravam dados no disco toda vez que são gravados. Um fluxo com buffer é um fluxo com seu próprio buffer, que consiste principalmente nos quatro tipos a seguir.

  • BufferedInputStream/BufferedOutputStream: fluxo de entrada com buffer de byte/fluxo de saída com buffer de byte
  • BufferedReader/BufferedWriter: Fluxo de entrada do buffer de caracteres/fluxo de saída do buffer de caracteres

Fluxo de transformação:

Em alguns requisitos, muitas vezes é necessário converter os dados de um fluxo de bytes em um fluxo de caracteres; ou é necessário converter um fluxo de caracteres em um fluxo de bytes. Nesse caso, é necessário usar o fluxo de conversão para concluir o função. O fluxo de conversão é geralmente usado em: Transcodificação de arquivos, quando os dados lidos da rede são um fluxo de bytes, mas o fluxo contém caracteres, você pode usar o fluxo de conversão para realizar a conversão; o fluxo de conversão em java.io é composta principalmente pelas duas classes seguintes:

  • InputStreamReader: usado para converter um fluxo de entrada de bytes em um fluxo de entrada de caracteres (byte -> caractere)
  • OutputStreamWriter: usado para converter um fluxo de saída de caracteres em um fluxo de saída de bytes (caractere -> byte)

Java BIO, NIO, AIO:

        O Java 1.4 começou a fornecer classes e interfaces relacionadas a NIO (New IO, non-blocking IO), como Channel, ByteBuffer e Selector, etc., para obter operações de IO mais eficientes. 1.7 começou a introduzir o modelo IO assíncrono AIO (Asynchronous IO). O AIO confia completamente a operação IO ao sistema, sem que o aplicativo espere a conclusão do IO.

  1. Java IO (BIO):
    Java IO, também conhecido como BIO (Blocking IO), é um modelo de IO fornecido pelo Java nos primeiros dias. É um IO bloqueante, ou seja, ao realizar uma operação de IO, a thread ficará bloqueada até que a operação de IO seja concluída. Java IO realiza operações de IO por meio de fluxos. As classes principais correspondentes incluem InputStream, OutputStream, Reader e Writer. Elas são síncronas e podem processar apenas uma solicitação por vez. No caso de grande quantidade de simultaneidade, o desempenho do modelo BIO é baixo.

  2. Java NIO:
    Java NIO (New IO) é um novo modelo de IO introduzido pelo Java na versão 1.4, que fornece IO sem bloqueio. O NIO usa o conceito de canal (Channel) e buffer (Buffer), os dados são transmitidos pelo canal e o Buffer é usado para operações de leitura e gravação. Comparado com o BIO, o NIO tem maior desempenho e capacidade de processamento simultâneo. As classes principais incluem Selector, Channel e Buffer, etc.

  3. Java AIO:
    Java AIO (Asynchronous IO) é um modelo de IO assíncrono introduzido pelo Java na versão 1.7. O AIO confia totalmente a operação de IO ao sistema, sem que o aplicativo espere que o IO seja concluído. Ele é baseado no evento e no mecanismo de retorno de chamada, lida com eventos de conclusão de IO por meio do CompletionHandler e pode lidar com várias solicitações de IO ao mesmo tempo. As classes principais incluem AsynchronousSocketChannel, AsynchronousServerSocketChannel e AsynchronousFileChannel, etc. 

Acho que você gosta

Origin blog.csdn.net/zhoushimiao1990/article/details/131920351
Recomendado
Clasificación