Série NIO --- concept de cache et de canal et démonstration de code

La différence entre IO traditionnel et NIO

?

IO traditionnel

1. Unidirectionnel

2. Orienté flux

?

NIO

1. Bidirectionnel

2. Le canal est responsable de la transmission et le tampon est responsable du stockage

?

Démonstration du concept et du code NIO

1. Cache

Zone de cache directe et zone de cache indirecte

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

Changements d'attribut après lecture et écriture du tampon

Icône de tampon indirect

Icône de tampon direct

Démo de code

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

2. Canal

La connexion entre le nœud source et le nœud cible est responsable de la transmission des données dans la zone de cache dans Java NIO. Le canal lui-même ne stocke pas de données et doit être transmis conjointement avec la zone de cache.

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

1. Comment obtenir la chaîne
  1. Java fournit la méthode getChannel () pour la classe qui prend en charge le canal
    Local IO
    FileInputStream / FileOutPutStream
    RandomAccesFile


    Prise réseau IO
    serveur socket
    DatagramSocket

  2. Après JDK 1.7, une méthode statique open () a été fournie pour chaque canal

  3. NewByteChannel () pour la classe d'utilitaire Files après JDK 1.7

Démo de code

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

Publié 33 articles originaux · loué 37 · 110 000 vues

Je suppose que tu aimes

Origine blog.csdn.net/hagle_wang/article/details/105086029
conseillé
Classement