注:更多特性详见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 状况
nio的一些特性
最新推荐文章于 2021-02-25 22:11:41 发布