Resumen de Java IO (BIO)

        Los flujos de E/S generalmente existen en pares, con entrada (Entrada) y salida (Salida), que es el proceso de transferir datos de un lugar a otro; para computadoras, el proceso de copia de archivos, la escritura y el guardado de archivos, y la visualización todas las funciones son IO se utiliza, el proceso de transmisión de datos se considera como una entrada y salida.

        Java IO, también conocido como BIO (Blocking IO), es un modelo IO proporcionado por Java en los primeros días. Es un IO de bloqueo, es decir, al realizar una operación de IO, el hilo se bloqueará hasta que se complete la operación de IO. La introducción principal aquí es el modelo BIO.

Clasificación OI:

        Según la dirección del flujo:

  •         Flujo de entrada (Entrada)
  •         Flujo de salida (Salida)

        Según el tipo de tratamiento del flujo: 

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

        Según la función de flujo:  

  •         Flujo de nodo (interactuar directamente con las fuentes de entrada y salida)
  •         Flujos de procesamiento (flujos que envuelven otros flujos: flujos envolventes)

 

flujo de bytes: 

        InputStream es la superclase de todos los flujos de entrada de bytes, que proporciona métodos básicos para leer datos de bytes. OutputStream es la superclase de todos los flujos de salida de bytes, que proporciona métodos básicos para escribir datos de bytes.

  • FileInputStream/FileOutputStream :Un flujo de bytes para leer y escribir archivos. Permiten leer o escribir datos de bytes en un archivo.
  • ByteArrayInputStream/ByteArrayOutputStream :Un flujo para leer y escribir matrices de bytes en la memoria.
  • BufferedInputStream/BufferedOutputStream :Proporciona entrada y salida con función de búfer, que puede mejorar la eficiencia de la operación IO
  • ObjectInputStream/ObjectOutputStream : Un flujo para leer y escribir objetos Java. Pueden serializar objetos Java en flujos de bytes o deserializar flujos de bytes en objetos Java.
  • PipedInputStream/PipedOutputStream:  flujos de canalización para la comunicación entre subprocesos, proporcionan un mecanismo para la transferencia de datos entre varios subprocesos. PipedInputStream recibe datos de PipedOutputStream.
    PipedOutputStream output = new PipedOutputStream();
    // 订阅output
    PipedInputStream input = new PipedInputStream(output); 
    
  • PrintStream: flujo de impresión de bytes

Flujo de personajes: 

        Reader/Writer: Reader es la superclase de todos los flujos de entrada de caracteres, que proporciona métodos básicos para leer datos de caracteres. Writer es la superclase de todos los flujos de salida de caracteres, que proporciona métodos básicos para escribir datos de caracteres.

  • InputStreamReader/OutputStreamWriter :Un flujo de puente para convertir un flujo de bytes en un flujo de caracteres. Convierten datos de bytes en datos de caracteres especificando una codificación de caracteres.
  • FileReader/FileWriter :Un flujo de caracteres para leer y escribir archivos. Permiten leer o escribir datos de caracteres en un archivo. Son implementaciones de flujo de caracteres basadas en FileInputStream y FileOutputStream.
  • BufferedReader/BufferedWriter:Un flujo de caracteres que proporciona funcionalidad de búfer. Pueden mejorar la eficiencia de lectura y escritura de flujos de caracteres y reducir la cantidad de operaciones de E/S reales en el sistema subyacente.
  • CharArrayReader/CharArrayWriter:Se utiliza para leer y escribir datos de matriz de caracteres.
  • PipedReader/PipedWriter:Operaciones de flujo de caracteres en flujos canalizados.
  • PrintWriter:flujo de impresión de caracteres

corriente amortiguada

        La eficiencia del flujo almacenado en el búfer es mayor que la de los flujos de caracteres y flujos de bytes ordinarios, porque en el kernel de Linux, solo cuando la información escrita en el búfer por el flujo almacenado en el búfer alcanza un cierto umbral o cuando el flujo almacenado en el búfer se actualiza, será en realidad se escriben en la información del disco, mientras que los flujos ordinarios escriben datos en el disco cada vez que se escriben. Una secuencia almacenada en búfer es una secuencia con su propio búfer, que consta principalmente de los siguientes cuatro tipos.

  • BufferedInputStream/BufferedOutputStream: flujo de entrada con búfer de bytes/flujo de salida con búfer de bytes
  • BufferedReader/BufferedWriter: flujo de entrada del búfer de caracteres/flujo de salida del búfer de caracteres

Transformar corriente:

En algunos requisitos, a menudo es necesario convertir los datos de un flujo de bytes en un flujo de caracteres, o es necesario convertir un flujo de caracteres en un flujo de bytes. En este caso, es necesario utilizar el flujo de conversión para completar la Función El flujo de conversión se usa generalmente en: transcodificación de archivos, cuando los datos leídos de la red son un flujo de bytes, pero el flujo contiene caracteres, puede usar el flujo de conversión para realizar la conversión; el flujo de conversión en java.io es compuesta principalmente por las siguientes dos clases:

  • InputStreamReader: se utiliza para convertir un flujo de entrada de bytes en un flujo de entrada de caracteres (byte -> carácter)
  • OutputStreamWriter: se utiliza para convertir un flujo de salida de caracteres en un flujo de salida de bytes (carácter -> byte)

Java BIO, NIO, AIO:

        Java 1.4 comenzó a proporcionar clases e interfaces relacionadas con NIO (New IO, non-blocking IO), como Channel, ByteBuffer y Selector, etc., para lograr operaciones de IO más eficientes. 1.7 comenzó a introducir el modelo de E/S asíncrona AIO (Asynchronous IO) AIO confía completamente la operación de E/S al sistema, sin que la aplicación espere a que se complete la E/S.

  1. Java IO (BIO):
    Java IO, también conocido como BIO (Blocking IO), es un modelo IO proporcionado por Java en los primeros días. Es un IO de bloqueo, es decir, al realizar una operación de IO, el hilo se bloqueará hasta que se complete la operación de IO. Java IO realiza operaciones de IO a través de flujos. Las clases principales correspondientes incluyen InputStream, OutputStream, Reader y Writer. Son sincrónicos y solo pueden procesar una solicitud a la vez. En el caso de una gran cantidad de concurrencia, el rendimiento del modelo BIO es bajo.

  2. Java NIO:
    Java NIO (New IO) es un nuevo modelo de IO introducido por Java en la versión 1.4, que proporciona IO sin bloqueo. NIO usa el concepto de canal (Channel) y búfer (Buffer), los datos se transmiten a través del canal y Buffer se usa para operaciones de lectura y escritura. En comparación con BIO, NIO tiene un mayor rendimiento y capacidades de procesamiento concurrente. Las clases principales incluyen selector, canal y búfer, etc.

  3. Java AIO:
    Java AIO (IO asíncrono) es un modelo de IO asíncrono introducido por Java en la versión 1.7. AIO confía completamente la operación de IO al sistema, sin que la aplicación espere a que se complete la IO. Se basa en el mecanismo de evento y devolución de llamada, maneja los eventos de finalización de IO a través de CompletionHandler y puede manejar varias solicitudes de IO al mismo tiempo. Las clases principales incluyen AsynchronousSocketChannel, AsynchronousServerSocketChannel y AsynchronousFileChannel, etc. 

Supongo que te gusta

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