Aprendizagem completa em programação de rede Java - compreensão abrangente de BIO_NIO_AIO, notas de aprendizagem (2)

Olá a todos, 方圆
espero que prossigam


1. Fluxo de caracteres e fluxo de bytes em java.io

Insira a descrição da imagem aqui

1.1 Fluxo de caracteres

O fluxo de caracteres é mais conveniente para nós. Geralmente, os caracteres são formados por vários bytes. Se usarmos a transmissão de fluxo de bytes, também precisamos convertê-la em caracteres por nós mesmos. Se usarmos o fluxo de caracteres diretamente, Pode ler e gerar caracteres diretamente.
Insira a descrição da imagem aqui

  • CharArrayReader: É um fluxo básico de entrada de caracteres, que pode ler dados de uma matriz de caracteres
  • StringReader: Leia os dados do fluxo de entrada da string
  • O mesmo para o fluxo de saída

1.1.1 Fluxos de caracteres mais avançados

Insira a descrição da imagem aqui

  • BufferedReader: Fluxo de entrada de caracteres com área de buffer, mas não podemos instanciá-lo diretamente para usarmos. Em vez disso, passaremos o fluxo de caracteres Reader que criamos, exatamente como ele 升级, com mais funções, como esta O fluxo de caracteres deve fornecer uma área de buffer, o que acelera a eficiência do io, sem ter que ler repetidamente a fonte de dados original
  • FilterReader: Também é usado 装饰模式, sua função adicional pode filtrar os caracteres no fluxo de caracteres, etc.
  • InputStreamReader: Uma ponte que conecta o fluxo de bytes e o fluxo de caracteres, convertendo o fluxo de bytes em fluxo de caracteres, o mais comumente usado é o FileReader

1,2 fluxo de bytes

O fluxo de bytes lê os bytes um por um
Insira a descrição da imagem aqui

  • ByteArrayInputStream: Fluxo de entrada da matriz de bytes, obter dados da matriz de bytes
  • FileInputStream: Fluxo de entrada de arquivo, obter dados do arquivo
  • O mesmo para o fluxo de saída

1.2.1 Fluxos de bytes mais avançados

Insira a descrição da imagem aqui

  • BufferedInputStream: Fluxo de entrada de byte com área de buffer, também é o mesmo princípio que BufferedReader, também precisa ser passado para o Fluxo de entrada para atualização
  • DataInputStream与DataOutputStream: Estes dois são mais interessantes. Eles se complementam e estão 基本数据类型relacionados ao java integrado . Você pode usar alguns métodos, como toLong ou toInt, para converter diretamente os bytes neles em tipos de dados básicos java.

2. Modo decorador

Insira a descrição da imagem aqui
O que acabamos de ver é que o BufferedReader, InputStreamReader e FilterReader no fluxo de caracteres e o BufferedInputStream, DataInputStreamReader e DataOutputStream no fluxo de bytes usam o padrão decorator, porque não podem ser instanciados e precisam passar no Reader ou InputStream básico. Para continuar 升级, aqui está o modo decorador.


3. Soquete

  • Podemos pensar no Socket como 网络传输的端点um tipo 数据源, vinculando um endereço IP específico e um número de porta a ele, para que ele possa realizar a função de comunicação. Conforme mostrado na figura abaixo, o soquete no servidor está vinculado ao ip e porta correspondentes Número, para comunicar com o cliente
    Insira a descrição da imagem aqui

3.1 Enviar dados pelo Socket

Insira a descrição da imagem aqui

  1. Criar Socket, vincular endereço IP específico e número de porta
  2. Ligue o soquete com o driver da placa de rede
  3. Podemos enviar dados pelo Socket
  4. O driver da placa de rede lê os dados do Socket

3.2 Ler dados através do Socket

Insira a descrição da imagem aqui

  • Semelhante ao envio de dados, exceto que o processo é revertido
  1. Ainda temos que criar o Socket primeiro
  2. Vinculando o soquete ao driver da placa de rede
  3. Socket recebe dados do driver da placa de rede
  4. Leia os dados do Socket

4. O conceito de não bloqueio síncrono, assíncrono e bloqueador

Eles têm quatro permutações e combinações diferentes de combinações dois por dois. Síncrono e assíncrono são enfatizados 通信机制. Em termos leigos, eles podem estar relacionados ao conceito de respondentes; enfatiza bloqueadores e não bloqueadores 调用状态, podemos entendê-los como chamadores ou iniciadores de solicitação
Insira a descrição da imagem aqui

4.1 Sincronização (menina)

Insira a descrição da imagem aqui
O menino confessou à menina e 女孩imediatamente pensou e reagiu ao incidente. Este é o mecanismo de comunicação síncrona

4.2 Assíncrono (menina)

Insira a descrição da imagem aqui
O mecanismo de comunicação assíncrona é que a menina 不会responde imediatamente ao pedido do menino, mas a menina considera primeiro. Se houver um resultado, enviarei uma mensagem de texto para você

4.3 Bloqueio (meninos)

Insira a descrição da imagem aqui
O garoto é uma pele de melão. Depois de confessar para a garota automaticamente, ele não pensa mais em comida e nem na comida, esperando a resposta dela.不做其他的事情

4.4 Sem bloqueio (meninos)

Insira a descrição da imagem aqui
Esse tipo de garoto é mais poderoso, capaz de coordenar a vida e o amor, e depois de confessar para uma garota, ele não se confunde com o resultado, mas 该干啥还去干啥esta é uma chamada sem bloqueio

4.5 Quatro permutações e combinações

  1. Bloqueio síncrono Depois que o
    menino confessou, a menina imediatamente pensou e reagiu.O menino esperou bobo no processo e não fez mais nada.
  2. Bloqueio assíncrono Depois que o
    menino confessou, a menina fugiu, foi para casa pensar em como responder, não pensou imediatamente, o menino esperou estupidamente, não faça mais nada
  3. Síncrono sem bloqueio Depois que o
    menino confessou, o menino fez outra coisa sem esperar sua resposta, mas a menina imediatamente começou a pensar, pensando no resultado da reação
  4. Assíncrono e não bloqueador
    Ambas as pessoas são mais propensas a pensar sobre isso. O menino termina sua confissão e faz outra coisa. A menina não considera o assunto imediatamente. Quando ele pensar no assunto, ele enviará uma mensagem ao menino.

Bloqueio síncrono, não bloqueador síncrono, bloqueio assíncrono, não bloqueador assíncrono


5. Pool de threads na comunicação de rede

Quando estamos processando altas solicitações simultâneas, se os métodos a seguir forem usados, isso causará um grande desperdício de recursos
Insira a descrição da imagem aqui

O uso do pool de threads é para evitar esta situação e economizar recursos do sistema

5.1 Thread pool fornecido por java

Insira a descrição da imagem aqui
Podemos usar Runnable e Callable para criar tarefas, usar threads no pool de threads para executar tarefas e, finalmente, obter resultados

5.2 método estático java para criar pool de threads

Insira a descrição da imagem aqui

  • newSingleThreadExecutor: Há apenas um tópico neste pool de tópicos e continuamos a reutilizá-lo
  • newFixedThreadPool: Um pool de threads com um número fixo de threads. Quando a capacidade da thread for excedida, aguarde
  • newCachedThreadPool: Este pool de threads criará novas threads para executar as tarefas extras
  • newScheduledThreadPool: Um pool de threads capaz de realizar tarefas de processamento cronometradas

frente!

Acho que você gosta

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