NIO系列---缓存和通道概念和代码demo

传统IO和NIO的区别



传统IO

1、单方向

2、 面向流的



NIO

1、双向的

2、channel负责传输,buffer负责存储



NIO概念以及代码demo

1.缓存区

直接缓存区和非直接缓存区

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

读写buffer后的属性变化

非直接缓冲区图示

直接缓冲区图示

代码demo

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

2、通道

源节点和目标节点的连接,在Java NIO中负责缓存区数据的传输,Channel本身不存储数据,需要配合缓存区进行传输

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

1、如何获取通道
  1. Java针对支持通道的类提供了getChannel()方法
    本地IO
    FileInputStream/FileOutPutStream
    RandomAccesFile

    网络IO
    socket
    serversocket
    DatagramSocket

  2. JDK 1.7之后对各个通道提供了静态方法 open()

  3. JDK 1.7之后对Files工具类的newByteChannel()

代码demo

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

发布了33 篇原创文章 · 获赞 37 · 访问量 11万+

猜你喜欢

转载自blog.csdn.net/hagle_wang/article/details/105086029