nio的一些特性

注:更多特性详见workspace中nio项目

一.缓冲区(Buffer):在java NIO中负责数据的存取。缓冲区就是数组,用于存储不同类型的数据
根据数据类型的不同,提供相应的缓冲区(boolean 除外)
ByteBuffer
CharBuffer
ShortBuffer
IntBuffer
LongBuffer
FloatBuffer
DoubleBuffer
上述缓冲区的管理方式几乎一致,通过allocate()获取缓冲区

二.缓冲区存取数据的两个核心方法
put():存入数据
get():取出数据

三.缓冲区的四个核心属性
capacity:容量,缓冲区能够存储的数据大小,一旦声明不能改变
limit:界限,缓冲区中可以操作数据的大小
position:位置,缓冲区中正在操作的数据位置
mark:标记,用来记录当前position的位置,可以通过reset()使position恢复到mark记录的位置
0 <= mark <= position <= limit <=capacity

四.直接缓冲区和非直接缓冲区
非直接缓冲区:通过allocate()方法分配缓冲区,将缓冲区建立在JVM的内存中
直接缓冲区:allocateDirect()方法分配缓冲区,将缓冲区建立在操作系统的物理内存中,这是可以提高效率的
注:只有ByteBuffer支持直接缓冲区的方式,其他都不行


一.通道(Channel):用于源节点和目标节点的连接。在java NIO中负责缓冲区的数据传输。Channel本身不存储数据,
因此需要配合缓冲区进行传输

二.通道的主要实现类
    FileChannel
    SocketChannel
    ServerSocketChannel
    DatagramChannel

三.获取通道
1.java针对支持通道的类提供了getChannel()方法
    本地IO:
    FileInputStream/FileOutputStream
    RandomAccessFile

    网络IO:
    Socket
    ServerSocket
    DatagramSocket

2.在java1.7中NIO.2针对各个通道提供了静态发放open()
3.在java1.7中NIO.2的Files工具类的newByteChannel()

四.通道间的数据传输,使用这两个方法也是属于直接缓冲区的方法
transferFrom()
transferTo()

五.分散(Scatter)和聚集(Gather)
分散读取(Scattering Reads):将通道中的数据分散到多个缓冲区中
聚集写入(Gathering Writes):将多个缓冲区的数据聚集到通道中
注:这个是会按照顺来读取或写入,跟以前的相比就是原来是操作缓冲区,现在是操作缓冲区数组

六、字符集:Charset
编码:字符串 -> 字节数组
解码:字节数组  -> 字符串


一、使用 NIO 完成网络通信的三个核心:
1. 通道(Channel):负责连接
      java.nio.channels.Channel 接口:
         |--SelectableChannel
            |--SocketChannel
            |--ServerSocketChannel
            |--DatagramChannel

            |--Pipe.SinkChannel
            |--Pipe.SourceChannel

2. 缓冲区(Buffer):负责数据的存取

3. 选择器(Selector):是 SelectableChannel 的多路复用器。用于监控 SelectableChannel 的 IO 状况


















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值