Java IO stream byte stream overview-1

Inserte la descripción de la imagen aquí

I / O

¿Qué es E / S?

  • En la vida, cuando conecta un disco U a su computadora y puede copiar un video a su computadora, este proceso de transmisión de datos
  • Podemos pensar en este tipo de transmisión de datos como un tipo de flujo de datos. Según la dirección del flujo, tomando la memoria como punto de referencia, se divide en entrada (entrada) y salida (salida), es decir, el flujo de entrada cuando fluye a la memoria y el flujo de salida que fluye fuera de la memoria
  • La operación IO en Java se refiere principalmente al contenido del paquete java.io, para las operaciones de entrada y salida, la entrada también se llamaLeerDatos, la salida también se llamaEscribirDatos

¡La siguiente figura muestra la relación de operación entre el disco duro y la memoria! ! !
Inserte la descripción de la imagen aquí

Clasificación de E / S

Según la dirección del flujo de datos: flujo de entrada y flujo de salida

  • Secuencia de entrada: una secuencia que lee datos de otros dispositivos en la memoria
  • Flujo de salida: un flujo que escribe datos desde la memoria a otros dispositivos.

Según el tipo de datos se divide en: flujo de bytes y flujo de caracteres La
siguiente figura es su clase principal superior
Inserte la descripción de la imagen aquí

Flujo de salida de bytes [OutputStream]

Cuando todos los datos del archivo (texto, imágenes, videos) se almacenan nuevamente, se almacenan en forma de dígitos binarios, todos de uno en un byte, el tiempo de transmisión es el mismo, por lo que el flujo de bytes puede transmitir cualquier dato de archivo
y luego operar el flujo es uniforme, necesitamos tiempo Está claro que no importa qué objeto de flujo de Yang se use, la transmisión subyacente es siempre datos binarios. La
clase abstracta java.io.OutputStream representa la clase padre de todas las clases que representan flujos de salida de bytes, escribe la información de bytes especificada en el destino y define El método básico de función común del flujo de bytes

Inserte la descripción de la imagen aquí

Nota: ¡El método de cierre, cuando se completa la operación de la secuencia, se debe llamar a este método para liberar los recursos del sistema!

public class Demo01OutputStream {

    public static void main(String[] args) throws IOException {

        FileOutputStream out = new FileOutputStream("F:\\ziwozongjie.txt");
        String content = "囧囧,囧囧是世界上好看的女人!!!";
        out.write(content.getBytes());
        out.close();
    }
}

Mirar la unidad F creará un archivo ziwozongjie.txt para usted y escribirá la siguiente oración en el archivo

El principio de escribir datos (memoria-> disco duro)

  • programa java-> JVM (máquina virtual java-> SO (sistema operativo) -> Método de llamada del SO para escribir datos-> escribir datos en el archivo

Principio de depositar datos

public class Demo01OutputStream {

    public static void main(String[] args) throws IOException {
        FileOutputStream out = new FileOutputStream("F:\\jiongjiong.txt");
        out.write(97);
        out.close();
    }
}

Al escribir datos, el sistema decimal se convertirá en sistema binario, el correspondiente almacenado es el sistema binario 97 es 1100001
cuando abrimos el editor de texto (cualquier editor de texto, bloc de notas o nodepad ++) consultará la codificación Tabla, convierta bytes a caracteres.
Si se almacena en 0-127, consultará la tabla de códigos ASCII y nuestro 97 corresponde a la letra en inglés A. Si son otros valores, la tabla de códigos predeterminada del sistema (sistema chino GBK o UTF-8 )

El resultado es minúscula a
Inserte la descripción de la imagen aquí

! ! ! Atencion ! !

  • Cuando llamamos al método de escritura de múltiples bytes a la vez, escritura nula (byte [] b)
  • Si el primer byte es un número positivo (0-127), se consultará la tabla de códigos ASCII cuando se muestre
  • Si el primer byte es negativo, entonces el primer byte y el segundo byte, dos bytes forman una pantalla china, consulte la tabla de códigos predeterminada del sistema (GBK)
public class Demo01OutputStream {

    public static void main(String[] args) throws IOException {

        FileOutputStream out = new FileOutputStream("F:\\jiongjiong.txt");
        byte[] b = {-65, -66, -67, 68, 79};
        out.write(b);
        out.close();
    }
}

Inserte la descripción de la imagen aquí

El resultado no es confuso, sino que corresponde a los caracteres chinos en la tabla GBK

Agregar escritura y currículum

Inserte la descripción de la imagen aquí

  • Nombre de cadena, archivo de archivo Escribir destino de datos
  • boolean append true: no sobrescribirá el archivo original, continuará agregando al final del archivo false: crea un nuevo archivo, sobrescribe el archivo original

! ! ! Código en! ! !

public class Demo02OutputStream {

    public static void main(String[] args) throws IOException {

        FileOutputStream fot = new FileOutputStream("F:\\cccc.txt", true);
        String content = "您好!豆豆";
        for (int i = 0; i < 10; i++) {
            fot.write(content.getBytes("utf-8"));
            fot.write("\r\n".getBytes());
        }
        fot.close();

    }
}

Inserte la descripción de la imagen aquí

Flujo de entrada de bytes [InputStream]

La clase abstracta java.io.InputStream es una superclase que representa todas las clases de flujos de entrada de bytes. Puede leer información de bytes en la memoria y define métodos básicos de funciones compartidas para flujos de entrada de bytes.

Inserte la descripción de la imagen aquí

Nota: ¡El método de cierre, cuando se completa la operación de la secuencia, se debe llamar a este método para liberar los recursos del sistema!

! ! ! Código en! ! !

public class Demo03FileInputStream {

    public static void main(String[] args) throws IOException {

        FileInputStream fis = new FileInputStream("F:\\cccc.txt");
        byte[] bytes = new byte[1024];
        int len = 0;
        while ((len = fis.read(bytes)) != -1) {
            System.out.println(new String(bytes, 0, len));
        }

    }
}

! ! ! El resultado! ! !
Inserte la descripción de la imagen aquí

Copia de archivo de demostración

public class Demo04FileInputStream {

    public static void main(String[] args) throws IOException {

        try (
                FileInputStream fis = new FileInputStream("F:\\cccc.txt");
                FileOutputStream fos = new FileOutputStream("F:\\dddd.txt");
        ) {
            int len = 0;
            byte[] bytes = new byte[1024];
            while ((len = fis.read(bytes)) != -1) {
                fos.write(bytes, 0, len);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        System.out.println("复制成功");


    }
}

Archivo copiado exitosamente
Inserte la descripción de la imagen aquí

Nota: Aquí utilicé la función de expresión Lambda de jdk8 probar ... con ... resource para que no haya necesidad de cerrar la secuencia en el bloque finalmente, jdk nos ayudará a optimizar este código para intentar ... capturar ... finalmente

Publicado 24 artículos originales · elogiado 33 · visitas 2391

Supongo que te gusta

Origin blog.csdn.net/weixin_41241629/article/details/104323586
Recomendado
Clasificación