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