一、Java NIO与标准IO的区别
1、channels和buffer,标注IO基于字节流和字符流操作,NIO基于通道和缓存操作
2、异步IO,NIO支持异步操作,标准IO只能同步操作
3、Selector,NIO的选择器可以监听多个通道
二、Java NIO由Channel和Buffers和Selectors几个核心部分组成
Channel实现FileChannel、DatagramChannel、SocketChannel、ServerSocketChannel
Buffer实现ByteBuffer、CharBuffer、DoubleBuffer、FloatBuffer、IntBuffer、LongBuffer、ShortBuffer
Selector用于减少线程,线程越多,线程总体的上下文切换开销就越大,处理效率越低。Selector监听4中事件,读、写、接收、连接。
三、Java NIO使用场合,连接数多,这些连接每次发送少量数据
标准IO适用场合,连接数少,连接每次发生大量数据
四、Buffer的flip方法从写模式切换到读模式,clear方法清空整个缓冲区,compact方法清理已经读过的数据。buffer本质上是一块可以写入/读取数据的内存,buffer属性capacity、position、limit。capacity表示buffer的最大容量,position在写模式下表示从当前位置开始写,在读模式下表示开始读的位置,从写操作切换读操作position重置0。limit在写模式下等于capacity,在读模式下表示从缓存中最多能读到多少数据。
五、分散(Scatter)和聚集(Gather),分散:读模式下,一个通道对应多个缓存。聚集:写模式下,多个缓存对应一个通道
1、channels和buffer,标注IO基于字节流和字符流操作,NIO基于通道和缓存操作
2、异步IO,NIO支持异步操作,标准IO只能同步操作
3、Selector,NIO的选择器可以监听多个通道
二、Java NIO由Channel和Buffers和Selectors几个核心部分组成
Channel实现FileChannel、DatagramChannel、SocketChannel、ServerSocketChannel
Buffer实现ByteBuffer、CharBuffer、DoubleBuffer、FloatBuffer、IntBuffer、LongBuffer、ShortBuffer
Selector用于减少线程,线程越多,线程总体的上下文切换开销就越大,处理效率越低。Selector监听4中事件,读、写、接收、连接。
三、Java NIO使用场合,连接数多,这些连接每次发送少量数据
标准IO适用场合,连接数少,连接每次发生大量数据
四、Buffer的flip方法从写模式切换到读模式,clear方法清空整个缓冲区,compact方法清理已经读过的数据。buffer本质上是一块可以写入/读取数据的内存,buffer属性capacity、position、limit。capacity表示buffer的最大容量,position在写模式下表示从当前位置开始写,在读模式下表示开始读的位置,从写操作切换读操作position重置0。limit在写模式下等于capacity,在读模式下表示从缓存中最多能读到多少数据。
五、分散(Scatter)和聚集(Gather),分散:读模式下,一个通道对应多个缓存。聚集:写模式下,多个缓存对应一个通道