Olá a todos,
方圆
espero que prossigam
índice
1. Fluxo de caracteres e fluxo de bytes em java.io
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.
CharArrayReader
: É um fluxo básico de entrada de caracteres, que pode ler dados de uma matriz de caracteresStringReader
: 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
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 originalFilterReader
: 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
ByteArrayInputStream
: Fluxo de entrada da matriz de bytes, obter dados da matriz de bytesFileInputStream
: 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
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çãoDataInputStream与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
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
3.1 Enviar dados pelo Socket
- Criar Socket, vincular endereço IP específico e número de porta
- Ligue o soquete com o driver da placa de rede
- Podemos enviar dados pelo Socket
- O driver da placa de rede lê os dados do Socket
3.2 Ler dados através do Socket
- Semelhante ao envio de dados, exceto que o processo é revertido
- Ainda temos que criar o Socket primeiro
- Vinculando o soquete ao driver da placa de rede
- Socket recebe dados do driver da placa de rede
- 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
4.1 Sincronização (menina)
O menino confessou à menina e 女孩
imediatamente pensou e reagiu ao incidente. Este é o mecanismo de comunicação síncrona
4.2 Assíncrono (menina)
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)
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)
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
- 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. - 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 - 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 - 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
O uso do pool de threads é para evitar esta situação e economizar recursos do sistema
5.1 Thread pool fornecido por java
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
newSingleThreadExecutor
: Há apenas um tópico neste pool de tópicos e continuamos a reutilizá-lonewFixedThreadPool
: Um pool de threads com um número fixo de threads. Quando a capacidade da thread for excedida, aguardenewCachedThreadPool
: Este pool de threads criará novas threads para executar as tarefas extrasnewScheduledThreadPool
: Um pool de threads capaz de realizar tarefas de processamento cronometradas
frente!