Aprendizaje integral de programación de redes Java comprensión integral de BIO_NIO_AIO, notas de aprendizaje (2)

Hola a todos, lo soy, 方圆
espero que sigan adelante


1. Flujo de caracteres y flujo de bytes en java.io

Inserte la descripción de la imagen aquí

1.1 Flujo de caracteres

El flujo de caracteres es más conveniente para nosotros. Generalmente, los caracteres están formados por varios bytes. Si usamos la transmisión de flujo de bytes, también debemos convertirlo en caracteres nosotros mismos. Si usamos el flujo de caracteres directamente, entonces Puede leer y generar caracteres directamente.
Inserte la descripción de la imagen aquí

  • CharArrayReader: Es un flujo de entrada de caracteres básico, que puede leer datos de una matriz de caracteres.
  • StringReader: Leer datos del flujo de entrada de la cadena
  • Lo mismo para el flujo de salida

1.1.1 Flujos de caracteres más avanzados

Inserte la descripción de la imagen aquí

  • BufferedReader: Flujo de entrada de caracteres con área de búfer, pero no podemos instanciarlo directamente para que lo usemos. En su lugar, pasaremos el flujo de caracteres de Reader que hemos creado, tal como este 升级, con más funciones, como esta El flujo de caracteres proporciona un área de búfer, que acelera la eficiencia de io, sin tener que leer repetidamente la fuente de datos original.
  • FilterReader: También se utiliza 装饰模式, su función adicional puede filtrar los caracteres en el flujo de caracteres, etc.
  • InputStreamReader: Un puente que conecta el flujo de bytes y el flujo de caracteres, que convierte el flujo de bytes en un flujo de caracteres, el más utilizado es FileReader

Secuencia de 1,2 bytes

El flujo de bytes lee los bytes uno por uno
Inserte la descripción de la imagen aquí

  • ByteArrayInputStream: Flujo de entrada de la matriz de bytes, obtener datos de la matriz de bytes
  • FileInputStream: Flujo de entrada de archivo, obtener datos del archivo
  • Lo mismo para el flujo de salida

1.2.1 Flujos de bytes más avanzados

Inserte la descripción de la imagen aquí

  • BufferedInputStream: Secuencia de entrada de bytes con área de búfer, también es el mismo principio que BufferedReader, también debe pasarse a la secuencia de entrada para actualizar
  • DataInputStream与DataOutputStream: Estos dos son más interesantes. Se complementan entre sí y están 基本数据类型relacionados con el java incorporado . Puede usar algunos métodos, como toLong o toInt, para convertir directamente los bytes en ellos en tipos de datos básicos de Java.

2. Modo decorador

Inserte la descripción de la imagen aquí
Lo que acabamos de ver es que BufferedReader, InputStreamReader y FilterReader en el flujo de caracteres, y BufferedInputStream, DataInputStreamReader y DataOutputStream en el flujo de bytes utilizan todos el patrón decorador, porque no se pueden crear instancias y deben pasar el Reader o InputStream básico. Para continuar 升级, aquí está el modo decorador.


3. Toma

  • Podemos pensar en Socket como 网络传输的端点un tipo 数据源, vinculando una dirección IP específica y un número de puerto a él, para que pueda realizar la función de comunicación.Como se muestra en la figura a continuación, el socket en el servidor está vinculado a la ip y el puerto correspondientes. Número, para comunicarse con el cliente
    Inserte la descripción de la imagen aquí

3.1 Enviar datos a través de Socket

Inserte la descripción de la imagen aquí

  1. Cree Socket, vincule la dirección IP específica y el número de puerto
  2. Vincular el Socket con el controlador de la tarjeta de red
  3. Podemos enviar datos a través de Socket
  4. El controlador de la tarjeta de red lee los datos del socket

3.2 Leer datos a través de Socket

Inserte la descripción de la imagen aquí

  • Similar al envío de datos, excepto que el proceso se invierte
  1. Todavía tenemos que crear Socket primero
  2. Vincular el Socket al controlador de la tarjeta de red
  3. El socket recibe datos del controlador de la tarjeta de red
  4. Leer datos de Socket

4. El concepto de no bloqueo sincrónico, asincrónico y bloqueante

Tienen cuatro permutaciones diferentes y combinaciones de combinaciones de dos por dos. Se enfatizan los sincrónicos y asincrónicos 通信机制. En términos sencillos, se pueden relacionar con el concepto de respondedores; los enfatiza el bloqueo y el no bloqueo 调用状态, podemos entenderlos como llamadores o iniciadores de solicitudes.
Inserte la descripción de la imagen aquí

4.1 Sincronización (niña)

Inserte la descripción de la imagen aquí
El niño le confesó a la niña e 女孩inmediatamente pensó y reaccionó ante el incidente. Este es el mecanismo de comunicación sincrónico

4.2 Asincrónico (niña)

Inserte la descripción de la imagen aquí
El mecanismo de comunicación asincrónica es que la niña 不会responde de inmediato a la solicitud del niño, pero la niña lo considera primero. Si hay un resultado, le enviaré un mensaje de texto.

4.3 Bloqueo (niños)

Inserte la descripción de la imagen aquí
El niño es una piel de melón. Después de confesarle a la niña automáticamente, no tiene pensamientos sobre la comida y la comida, esperando la respuesta de la niña.不做其他的事情

4.4 Sin bloqueo (niños)

Inserte la descripción de la imagen aquí
Este tipo de chico es más poderoso, capaz de coordinar la vida y el amor, y después de confesarse con una chica, no se confunde con el resultado, pero 该干啥还去干啥esta es una llamada sin bloqueo.

4.5 Cuatro permutaciones y combinaciones

  1. Bloqueo sincrónico Después de que el
    niño confesó, la niña inmediatamente pensó y reaccionó, el niño esperó tontamente en el proceso y no hizo nada más.
  2. Bloqueo asincrónico Después de que el
    niño confesó, la niña se escabulló, se fue a casa a pensar cómo responder, no pensó de inmediato, el niño esperó estúpidamente, no hizo nada más
  3. Sin bloqueo sincrónico Después de que el
    niño confesó, el niño hizo algo más sin esperar a que usted respondiera, pero la niña inmediatamente se puso a pensar, pensando en el resultado de la reacción.
  4. Asincrónico y sin bloqueo
    Es más probable que ambas personas lo piensen. El niño termina su confesión y hace otra cosa. La niña no considera este asunto de inmediato. Cuando lo considere, enviará un mensaje al niño.

Bloqueo sincrónico, sin bloqueo sincrónico, bloqueo asincrónico, sin bloqueo asincrónico


5. Grupo de subprocesos en la comunicación de red

Cuando estamos procesando altas solicitudes concurrentes, si se utilizan los siguientes métodos, se producirá un gran desperdicio de recursos
Inserte la descripción de la imagen aquí

El uso del grupo de subprocesos es para evitar esta situación y ahorrar recursos del sistema.

5.1 Grupo de subprocesos proporcionado por java

Inserte la descripción de la imagen aquí
Podemos usar Runnable y Callable para crear tareas, usar subprocesos en el grupo de subprocesos para realizar tareas y finalmente obtener resultados

5.2 método estático de java para crear un grupo de subprocesos

Inserte la descripción de la imagen aquí

  • newSingleThreadExecutor: Solo hay un hilo en este grupo de hilos y continuamos reutilizando este hilo
  • newFixedThreadPool: Un grupo de subprocesos con un número fijo de subprocesos. Cuando se excede la capacidad de subprocesos, espere
  • newCachedThreadPool: Este grupo de subprocesos creará nuevos subprocesos para ejecutar las tareas adicionales
  • newScheduledThreadPool: Un grupo de subprocesos capaz de realizar tareas de procesamiento cronometradas

¡adelante!

Supongo que te gusta

Origin blog.csdn.net/qq_46225886/article/details/107465199
Recomendado
Clasificación