NIO用于数据传输,应对高并发场景,主要组件包括:Buffer、Channel、Selector;IO(BIO)的缺点如下:
1. BIO是单线的流,客户端请求服务端需要创建两次流,效率低;
2. 一对一连接,每一个客户端都需要一个服务端线程来处理,并发大的时候,服务器会产生大量线程,导致效率低,甚至崩溃;
3. 客户端连接之后,即使不产生任何操作,也会占用服务器端线程的占用,浪费资源;
buffer即为缓冲区,用于数据存储,底层用数组存储,存储的元素类型为基本类型,Buffer针对JAVA8个基本数据类型,提供了7个子类型(除了boolean类型)
因为boolean类型可以通过规定1为true,0为false来实现存储boolean类型,不影响使用,7个子类型最常用的是byteBuffer,因为计算机数据传输以字节形式;
capacity: 容量位,记录缓冲区的容量,初始化指定后不可变;
limit: 限制位, 用于标记操作位能到达的最大位置,新建一个buffer,limit默认在最后一位,和capacity指向同一个位置;
position: 操作位,指向要操作的位置,默认在第零位;
mark:标记位,用于数据的校验,在java中mark位默认不启用,值为-1;
原文:https://www.cnblogs.com/oxygenG/p/12635464.html