NIO和BIO區(qū)別
1. 面向流與面向緩沖
Java NIO和BIO之間第一個最大的區(qū)別是,BIO是面向流的,NIO是面向緩沖區(qū)的钝鸽。
- Java BIO面向流意味著每次從流中讀一個或多個字節(jié),直至讀取所有字節(jié)始绍,它們沒有被緩存在任何地方瞳购。如果流的數(shù)據(jù)沒有就位话侄,那么一直阻塞著。
- Java NIO的緩沖導(dǎo)向方法略有不同学赛。數(shù)據(jù)讀取到一個它稍后處理的緩沖區(qū)年堆,需要時可在緩沖區(qū)中前后移動。這就增加了處理過程中的靈活性盏浇。
- Java NIO當(dāng)流(InputStream)未就位時变丧,非阻塞
- 但是:Java NIO還需要檢查是否該緩沖區(qū)中包含所有您需要處理的數(shù)據(jù)。而且绢掰,需確保當(dāng)更多的數(shù)據(jù)讀入緩沖區(qū)時痒蓬,不要覆蓋緩沖區(qū)里尚未處理的數(shù)據(jù)童擎。
2. 多路復(fù)用
BIO:一個線程管理一個連接
NIO:一個線程管理多個連接