摘要:
Java NIO和阻塞IO的区别:
阻塞I/O在调用InputStream.read()方法时是阻塞的,它会一直等到数据到来时(或超时)才会返回;同样,在调用ServerSocket.accept()方法时,也会一直阻塞到有客户端连接才会返回,每个客户端连接过来后,服务端都会启动一个线程去处理该客户端的请求。 阻塞I/O的缺点: 1. 当客户端多时,会创建大量的处理线程。且每个线程都要占用栈空... 阅读全文
摘要:
在单独的线程中,检查多个通道是否可以进行IO操作。 Selector创建:静态工厂方法创建 Selector selector = Selector.open(); 注册通道 channel.configureBlocking(false);
SelectionKey key = channel.register(selector, Selectionkey.OP_READ)... 阅读全文
摘要:
channel与流的区别: 流基于字节,且读写为单向的。
通道基于快Buffer,可以异步读写。除了FileChannel之外都是双向的。 channel的主要实现: FileChannel
DatagramChannel:UDP读写
SocketChannel:TCP读写
ServerSocketChannel 支持scatter/gather(分散和聚集) 分散(scatte... 阅读全文
摘要:
Java NIO的核心部件: Buffer
Channel
Selector Buffer
是一个数组,但具有内部状态。如下4个索引: capacity:总容量
position:下一个要读取/写入的元素索引
limit:限制,第一个不能读取/写入的元素索引
mark:位置标记,重置position
//通过调用Buffer.mark()方法,可以标记Buffer中的一个特定positio... 阅读全文