NIO和BIO区别
1. 面向流与面向缓冲
Java NIO和BIO之间第一个最大的区别是,BIO是面向流的,NIO是面向缓冲区的。
- Java BIO面向流意味着每次从流中读一个或多个字节,直至读取所有字节,它们没有被缓存在任何地方。如果流的数据没有就位,那么一直阻塞着。
- Java NIO的缓冲导向方法略有不同。数据读取到一个它稍后处理的缓冲区,需要时可在缓冲区中前后移动。这就增加了处理过程中的灵活性。
- Java NIO当流(InputStream)未就位时,非阻塞
- 但是:Java NIO还需要检查是否该缓冲区中包含所有您需要处理的数据。而且,需确保当更多的数据读入缓冲区时,不要覆盖缓冲区里尚未处理的数据。
2. 多路复用
BIO:一个线程管理一个连接
NIO:一个线程管理多个连接