NIOシリーズ---キャッシュおよびチャネルの概念とコードのデモ

従来のIOとNIOの違い

従来のIO

1.単方向

2.ストリーム指向

NIO

1.双方向

2.チャネルは送信を担当し、バッファは保存を担当します

NIOの概念とコードのデモ

1.キャッシュ

直接キャッシュ領域と間接キャッシュ領域

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

バッファの読み書き後に属性が変更される

間接バッファアイコン

直接バッファアイコン

コードデモ

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

2.チャネル

ソースノードとターゲットノード間の接続は、Java NIOのキャッシュ領域でのデータの送信を担当します。チャネル自体はデータを格納せず、キャッシュ領域と併せて送信する必要があります。

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

1.チャンネルを取得する方法
  1. Javaは、チャネルをサポートするクラスにgetChannel()メソッドを提供します
    ローカルIO
    FileInputStream / FileOutPutStream
    RandomAccesFile

    ネットワークIO
    ソケット
    サーバーソケット
    DatagramSocket

  2. JDK 1.7以降、静的メソッドopen()が各チャネルに提供されました

  3. JDK 1.7以降のファイルユーティリティクラスのNewByteChannel()

コードデモ

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

元の記事を33件公開しました 賞賛されました37 再生回数110,000回

おすすめ

転載: blog.csdn.net/hagle_wang/article/details/105086029