Serie NIO --- concepto de caché y canal y demostración de código

La diferencia entre IO tradicional y NIO

?

IO tradicional

1. Unidireccional

2. Orientado a la transmisión

?

NIO

1. Bidireccional

2. El canal es responsable de la transmisión, y el buffer es responsable del almacenamiento.

?

Concepto NIO y demostración de código

1. Caché

Área de caché directa y área de caché indirecta

 非直接缓存区 通过allocate方法分配缓存区,缓存区直接建立在JVM的内存
 直接缓存区 通过 allocateDirect分配缓存区  建立在os缓存
 
 数据类型不同   提供了对应的缓存区(boolean除外)
 ByteBuffer(常用)
 CharBffer
 缓存区的管理方式几乎一致   都是用allocate分配
 缓存区存储数据有俩个方法
 put 存入数据到缓冲区和
 get 从缓存区获取数据
 缓存区的核心属性
   position = 0;缓存区正在操作数据的位置
   limit;表示缓存区最大存储的数据容量 limit后的数据不能读写
   capacity;  缓存区最大存储容量  一旦声明不能改变
   
													

Los cambios de atributos después de leer y escribir en el búfer

Icono indirecto del búfer

Icono de búfer directo

Código de demostración

https://gitee.com/WenHaiGo/code-mark/blob/master/IO/src/NIO/TestBuffer.java

2. Canal

La conexión entre el nodo de origen y el nodo de destino es responsable de la transmisión de datos en el área de caché en Java NIO. El canal en sí no almacena datos y debe transmitirse junto con el área de caché.

 java.nio.channels.Channel接口
* 主要实现类
*      --FileChannl 本地文件
*      --SocketChannl  TCP
*      --ServerSocketChannl  TCP
*      --DataGramChannel     UDP

1. Cómo obtener el canal
  1. Java proporciona el método getChannel () para la clase que admite el canal
    Local IO
    FileInputStream / FileOutPutStream
    RandomAccesFile

    Network IO
    socket
    serversocket
    DatagramSocket

  2. Después de JDK 1.7, se proporcionó un método estático open () para cada canal

  3. NewByteChannel () para la clase de utilidad Archivos después de JDK 1.7

Código de demostración

https://gitee.com/WenHaiGo/code-mark/blob/master/IO/src/NIO/TestChannelByCopyFile.java

Publicó 33 artículos originales · elogió 37 · 110,000 visitas

Supongo que te gusta

Origin blog.csdn.net/hagle_wang/article/details/105086029
Recomendado
Clasificación