21 caracteres de E / S (flujo de entrada y salida) y bytes

Hola a todos, soy un cerdo arqueado por repollo.

1. Introducción a los flujos de entrada y salida.

El código que tocamos en esta etapa generalmente se basa en la consola.
Generamos los datos por System.out - System.out.print ("el objetivo de salida es la pantalla").
La entrada es System.in. Primero define un objeto de escáner, escanea los datos ingresados ​​por el usuario en la consola
Scanner scan = new Scanner ( System.in ); la fuente de la entrada proviene de la entrada del usuario
(1) en la Consola Juicio de salida y flujo de salida
El juicio de entrada y salida se basa en el programa
Lectura de un archivo: entrada (en el programa)
escritura de un archivo: salida (la información proviene del programa)
(2) lectura es entrada, escritura (escritura) ) Es la salida.
Imaginamos el código del programa como nuestro propio cerebro. Cuando leemos un libro, es un proceso de entrada de conocimiento en el cerebro. Luego tuvimos algunas ideas y escribimos lo que pensábamos en papel en nuestras cabezas. ¿Es este un proceso de salida? Todo se basa en nuestro cerebro, es decir, el programa.
(3) JDBC, la entrada y salida entre el programa y la base de datos El
Inserte la descripción de la imagen aquí
flujo de entrada y el flujo de salida son dos canales de transmisión de datos, al igual que la paja cuando bebemos una bebida. Juzgamos que la dirección del flujo de entrada y salida es muy simple, es decir, usarnos a nosotros mismos como referencia, como cuando nosotros y el té con leche, es difícil insertar el tubo y hacer un agujero. En el programa específico, solo usamos el programa como el objeto de referencia, insertamos el tubo en la base de datos, y luego obtenemos los datos a través de este tubo, por lo que la dirección de los flujos de entrada y salida se dirigen a la base de datos. Cuando bebemos té con leche de perla, ¿aparece tan pronto como chupamos la perla en la boca? Los datos son los mismos. El flujo de la flecha verde en la figura es el flujo de datos.
(4) Archivo y entrada y salida de archivos
De lo que hablamos antes es de la tendencia de datos entre el programa y la base de datos. Queremos copiar los datos en un archivo a otro archivo, queremos ver si hay una tubería entre este archivo y el archivo, sí, el archivo anterior se llama el archivo fuente y el archivo que se escribirá en los datos se llama el destino Archivo. Hay un pequeño agujero entre ellos, que permite que los datos salgan o entren. El archivo de origen se inserta en la tubería de flujo de salida y el archivo de destino se inserta en la tubería de flujo de entrada. Las dos tuberías tienen nombres diferentes y son dos tuberías independientes. No se puede conectar directamente. En cambio, utiliza programas para implementar la interacción de datos. Como se muestra en la figura, la dirección de la secuencia de entrada y la secuencia de salida se basa en el programa. Piense en cómo se inserta el popote.
(5) Los datos en los dos flujos de entrada y salida comunes
Reader / Writer se transmiten en forma de caracteres , principalmente texto, y los datos en
InputStream / OutStream se transmiten en forma de bytes , principalmente hipertexto (como imágenes, audio, etc.) )

2. Hablemos sobre cómo escribir los datos del archivo en otro archivo

(1) Primero, tenemos que crear dos archivos , uno es el archivo de origen y el otro es el archivo de destino.

	//源
			File 源文件 = new File("d:/test0807/a.txt");
			
			//目标
			File 目标文件 = new File("d:/test0807/x.txt");

( 2) Cree flujos de entrada, flujos de salida (dos canales) y dígales dónde se insertan.

			FileReader 输入流 = new FileReader(源文件);
			
			FileWriter 输出流 = new FileWriter(目标文件);

El FIleReader aquí es una secuencia de entrada, y el parámetro es decirle dónde insertar, es decir, qué archivo conectar.
(3) Cree un área de almacenamiento intermedio , primero guarde los datos en el programa y luego escriba en el archivo de destino, donde Reader / Wrieter tiene la forma de caracteres, por lo que definimos una matriz de caracteres para almacenar en caché estos datos primero. ¿Cuánto debe durar la matriz de caracteres? Como en la vida real, tenemos que transportar mucha arena desde el sitio de producción hasta el sitio de construcción. No estamos construyendo un taxi que pueda instalarse por completo, sino que muchos automóviles pequeños se transportan en lotes múltiples. Esta es también la razón del almacenamiento en búfer. Pensamos en la matriz de caracteres como un carrito y la transportamos de un lado a otro hasta que esté terminada, por lo que debería ser un bucle.
Hay otra situación que debemos considerar: si definimos la longitud de la matriz de caracteres como 5 y la longitud del archivo de origen como 13, entonces debe transportarse tres veces, por lo que la longitud del archivo de destino es 15. ¿Hay una pérdida de espacio para 2 caracteres, para evitar esto? Tipo de desperdicio, write () puede ayudarnos a lograr

			char[] 临时缓冲区 = new char[5];
			
			int len = 0;
			while ((len = 输入流.read(临时缓冲区)) > 0) {
				输出流.write(临时缓冲区, 0, len);
			}
			

Primero defina len = 0, úselo para igualar la longitud de los datos leídos del archivo de origen, si es mayor que 0, y luego escríbalo en el archivo de destino, igual a 0 significa que la lectura ha finalizado. Salida stream.write (buffer temporal, 0, len); significa que los datos en el buffer son seguidos por los datos en el archivo de destino, y 0 representa el desplazamiento, por ejemplo, para decir "Hola a todos, soy un chico guapo" , El primer bucle se escribe en "Hola a todos, soy" un total de 5 caracteres, si el desplazamiento es -1, entonces el siguiente contenido es "Hola a todos, mi chico guapo" sobrescribirá "Sí", len representa Escribe la longitud. En la explicación, la salida stream.write (buffer temporal, 0, len) es escribir los datos del buffer temporal a la longitud de len de acuerdo con el desplazamiento de 0, de acuerdo con el 13 mencionado anteriormente, y la longitud final es 3. Entonces evite Desperdiciado
(4) No olvide cerrar el flujo de entrada y el flujo de salida después de abrirlo, y cierre la tapa cuando la bebida se haya ido.

			输入流.close();
			输出流.close();

Debajo está el código completo

public static void main(String[] args) {
		try {

			//源
			File 源文件 = new File("d:/test0807/a.txt");
			
			//目标
			File 目标文件 = new File("d:/test0807/x.txt");
			
			FileReader 输入流 = new FileReader(源文件);
			
			FileWriter 输出流 = new FileWriter(目标文件);
			
			/*
			 * 输入流:可以读取源文件中的数据到【程序】中
			 * 输出流:可以把【程序】中的数据,写入到目标文件
			 * */
			
			//创建一个临时存储区域,buffer(缓冲)
			char[] 临时缓冲区 = new char[5];
			
			int len = 0;
			while ((len = 输入流.read(临时缓冲区)) > 0) {
				输出流.write(临时缓冲区, 0, len);
			}
			
			输入流.close();
			输出流.close();
			
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

El siguiente es un ejemplo de FIleInputStream / FileOutputStream La
diferencia es que uno es una matriz de caracteres y el otro es una matriz de bytes

public static void main(String[] args) {
		try {
			File 源文件 = new File("d:/test0807/normal.png");
			
			File 目标 = new File("d:/test0807/target.png");
			
			InputStream 输入流 = new FileInputStream(源文件);
			
			OutputStream 输出流 = new FileOutputStream(目标);
			
			byte[] buffer = new byte[1024];
			
			int len = 0;
			while ((len = 输入流.read(buffer)) > 0) {
				输出流.write(buffer, 0, len);
			}
			
			/*输入流.read(buffer);
			输出流.write(buffer);*/
			
			输入流.close();
			输出流.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
Publicado 24 artículos originales · elogiado 4 · visitas 2038

Supongo que te gusta

Origin blog.csdn.net/weixin_44226263/article/details/98881555
Recomendado
Clasificación