[Conceptos básicos de JAVA] Explicación detallada de IO

[Conceptos básicos de JAVA] Explicación detallada de IO

I. Descripción general

Una secuencia es un conjunto secuenciado de bytes con un punto inicial y un punto final. Es un término general o abstracción para la transmisión de datos. La transmisión de datos entre dos dispositivos se denomina flujo. La esencia de un flujo es la transmisión de datos. El flujo se abstrae en varias clases de acuerdo con las características de transmisión de datos para facilitar operaciones de datos más intuitivas.

2. El papel del flujo IO

Realizar la transferencia de datos entre dos dispositivos objeto.

3. Escenarios de uso del flujo IO

  1. Cuando usamos la clase Archivo, solo podemos realizar operaciones con archivos, que incluyen: obtener atributos de archivo, crear, eliminar, mover archivos, etc., pero no podemos realizar cambios en el contenido del archivo. Si desea operar con el contenido del archivo, debe leer, eliminar el contenido del archivo, etc.
  2. Escenarios de uso de flujos IO: cuando necesita operar con el contenido de un archivo.

El objeto de operación del flujo IO es un archivo, en lugar de leer y escribir una carpeta. Cuando utilice transmisiones IO, tenga cuidado de no establecer una conexión con una carpeta.

4. Clasificación de flujos IO

Se divide en diferentes flujos de IO según diferentes estándares de clasificación:

4.1 Puntos unitarios para transmisión de datos:
  • Flujo de bytes: lo que se transmite son bytes y la unidad son bytes. La unidad mínima para leer un flujo de bytes es un byte (1 byte = 8 bits). Puede operar con cualquier tipo de datos.
  • Flujo de caracteres: Lo que se transmite son bytes y se puede leer un carácter a la vez (1 carácter = 2 bytes = 16 bits), la diferencia es que la operación de codificación se agrega durante el proceso de transmisión, lo que hace que nuestra operación sea más conveniente.
4.2 Dirección de transmisión de datos:
  • **Entrada de flujo de entrada:** Leer datos externos (datos de dispositivos de almacenamiento como discos y discos ópticos) en el programa (memoria)
  • **Salida del flujo de salida:** Salida de datos del programa (memoria) a dispositivos de almacenamiento como discos y discos ópticos.
4.3 Diferentes roles del flujo:
  • Flujo de nodo: un flujo que lee y escribe datos directamente desde una fuente (este flujo no está empaquetado ni modificado) El flujo de procesamiento es un flujo basado en la encapsulación del flujo de nodo. FileInputStream es un flujo de nodo que puede leer datos directamente desde un archivo, pero BufferedInputStream puede envolver FileInputStream para que tenga función de almacenamiento en búfer.
  • Flujo de procesamiento: se utiliza para conectar y encapsular un flujo de nodo existente y realizar las capacidades de lectura y escritura del flujo a través del flujo encapsulado. Cuando se utilizan flujos de procesamiento, el programa no se conecta directamente a la fuente de datos real, sino que se conecta a un flujo existente.

5. Sistema de flujo IO

Clasificación Flujo de entrada de bytes Flujo de salida de bytes flujo de entrada de caracteres flujo de salida de caracteres
clase base abstracta Flujo de entrada Flujo de salida Lector Escritor
acceder a archivos flujo de entrada de archivos Flujo de salida de archivos Lector de archivos escritor
matriz de acceso ByteArrayInputStream ByteArrayOutputStream CharArrayReader CharArrayWriter
tubería de acceso Flujo de entrada canalizado Flujo de salida canalizado lector canalizado escritor de tuberías
cadena de acceso Lector de flujo de entrada Escritor de flujo de salida
flujo almacenado en buffer Flujo de entrada almacenado en búfer Flujo de salida almacenado en búfer Lector almacenado en búfer Escritor almacenado en búfer
Flujo de conversión Lector de flujo de entrada SalidaSteamReader
flujo de objetos flujo de entrada de objetos flujo de salida de objetos
Filtrar flujo de entrada Filtrar flujo de salida Lector de filtros Escritor de filtros
flujo de impresión Flujo de impresión Imprenta
Rechazar el flujo de entrada Flujo de entrada de retroceso Lector de retroceso
flujo especial Flujo de entrada de datos Flujo de salida de datos

6. Flujo de entrada de bytes InputStream

InputStream es una clase virtual, que es un flujo de entrada de caracteres en Java, que se utiliza para leer datos de archivos en programas Java.

El método más utilizado es: FileInputStream

  • Métodos comunes

    1. int read(): lee un byte de datos del archivo. Y devolver el byte leído. Si se completa la lectura, el valor de retorno es -1;
    2. int read(byte[] b): lee una matriz de bytes a la vez. El flujo de entrada colocará el contenido leído en esta matriz de bytes y devolverá el número leído. Si se completa la lectura, devolverá -1;
    3. void close(); cerrar el flujo de bytes;
  • Pasos de implementación de FileInputStream

    1. Cree un objeto de flujo FileInputStream y vincule un archivo de origen de datos
    2. Llame al método de lectura para leer datos.
    3. Liberar recursos
  • Código de muestra

    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 de flujo de entrada
    Insertar descripción de la imagen aquí

7. Flujo de salida de bytes OutputStream

La clase OutputStream es la clase base para todos los flujos de salida en la API Java IO. Las subclases incluyen BufferedOutputStream, FileOutputStream, etc. OutputStream es un modo de decoración típico, que se puede subclasificar directamente cuando se usa. OutputStream puede enviar a consola, archivos, discos y otros medios de destino.

  • Métodos comunes

    1. void close(); Cierra el flujo de salida para evitar que los recursos estén muy ocupados, lo que eventualmente puede conducir a un desbordamiento de manejo o desbordamiento de memoria.
    2. escritura vacía (int b); el único método abstracto en una clase abstracta. Las subclases no abstractas deben implementar este método.
    3. void write(byte b[]) genera directamente todo el contenido de una matriz de bytes.
    4. void write(byte b[], int off, int len) El contenido que se generará se ha almacenado en la matriz de bytes b[], pero no se genera todo. Solo se generan len bytes que comienzan desde la posición off de la matriz. producción.
    5. void lush() vacía el flujo de salida y genera todos los bytes almacenados en el búfer. Dado que algunas transmisiones admiten el almacenamiento en caché, este método forzará que todo el contenido de la caché se envíe a la transmisión.
  • Pasos de implementación de OutputStream

    1. Crear un objeto de flujo OutputStream
    2. escribir entrada del método
    3. close cierra la transmisión para evitar el desbordamiento de la memoria
  • Código de muestra

     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 de flujo de salida
    Insertar descripción de la imagen aquí

8. Lector de flujo de entrada de caracteres

Reader es la clase principal del flujo de caracteres de entrada. Es una clase abstracta y no se recomienda para la lectura y escritura de archivos.

  • Métodos comunes

    1. void close(); Cierra la secuencia y libera todos los recursos asociados con ella;
    2. marca nula (int readAheadLimit); marca la posición actual en la secuencia;
    3. boolean markSupported(); determina si esta secuencia admite la operación mark();
    4. int read(); leer un solo carácter;
    5. int read(char[] cbuf);Leer caracteres en una matriz;
    6. int read(char[] cbuf, int off, int len);Lee caracteres en una determinada parte de la matriz;
    7. int read(CharBuffer target);Intenta leer caracteres en el buffer de caracteres especificado
    8. boolean ready(); determina si esta secuencia está lista para ser leída;
    9. void reset();Restablecer la transmisión
    10. salto largo (n largo); saltar caracteres
  • Pasos de implementación del lector

    1. Crea un objeto de flujo de lectura de archivos asociado con el archivo con el nombre especificado; se garantiza que el archivo existe. Cuando el archivo no existe, se produce una excepción (FileNotFoundException);
    2. Llame al método de lectura del objeto de flujo de lectura para leer un carácter a la vez y leer automáticamente los caracteres posteriores;
    3. Llame al método para cerrar la secuencia de caracteres;
  • Código de muestra

    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 lector
    Insertar descripción de la imagen aquí

9. Proceso de salida de caracteres Escritor

La clase Writer es la clase base de todos los Writers en Java IO y es una clase abstracta ubicada en el paquete java.io. Implemente subclases que implementen Writer, incluidos BufferedWriter y PrintWriter.

  • Métodos comunes

    1. El escritor append(char c) agrega el carácter especificado a esta escritura
    2. Writer append(CharSequence csq) agrega la secuencia de caracteres especificada a este escritor
    3. Writer append(CharSequence csq, int start, int end) agrega una subsecuencia de la secuencia de caracteres especificada a este escritor.Appendable
    4. abstract void close() cierra esta secuencia, pero la vacía primero
    5. abstract void Flush() actualiza el buffer de esta secuencia
    6. void write(char[] cbuf) escribe una matriz de caracteres
    7. abstract void write(char[] cbuf, int off, int len) escribe una determinada parte de la matriz de caracteres
    8. escritura vacía (int c) escribe un solo carácter
    9. escritura vacía (String str) escribe una cadena
    10. escritura vacía (String str, int off, int len) escribe una determinada parte de la cadena
  • Pasos de implementación del escritor

    1. Crear una instancia de Writer a través de una subclase
    2. Implementar operaciones de escritura de archivos mediante el método de escritura.
    3. close cierra el flujo de salida y libera recursos.
  • Código de muestra

    public static  void writeMethod() throws IOException {
          
          
       Writer out = new FileWriter("D:\\goyeer.log");
       String str = "I/O字符流,Writer类应用。";        
       out.write(str);
       out.close();
    }
    
  • sistema de escritura
    Insertar descripción de la imagen aquí

10. Resumen

Java IO es el sistema de entrada y salida de Java, es decir, entrada y salida, que se refiere a la transferencia de datos entre aplicaciones y dispositivos externos. Los dispositivos externos comunes incluyen archivos, tuberías y conexiones de red. Al escribir un programa, elija el flujo de bytes y el flujo de caracteres que se adapten a su escenario y utilice subclases abstractas de manera flexible.

Supongo que te gusta

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