BIO、NIO、AIO
NIO vs IO之間的理念上面的區別(NIO將阻塞交給了後臺線程執行)git
- IO是面向流的,NIO是面向緩衝區的
- Java IO面向流意味着每次從流中讀一個或多個字節,直至讀取全部字節,它們沒有被緩存在任何地方;
- NIO則能先後移動流中的數據,由於是面向緩衝區的
- IO流是阻塞的,NIO流是不阻塞的
- Java IO的各類流是阻塞的。這意味着,當一個線程調用read() 或 write()時,該線程被阻塞,直到有一些數據被讀取,或數據徹底寫入。該線程在此期間不能再幹任何事情了
- Java NIO的非阻塞模式,使一個線程從某通道發送請求讀取數據,可是它僅能獲得目前可用的數據,若是目前沒有數據可用時,就什麼都不會獲取。NIO可以讓您只使用一個(或幾個)單線程管理多個通道(網絡鏈接或文件),但付出的代價是解析數據可能會比從一個阻塞流中讀取數據更復雜。
- 非阻塞寫也是如此。一個線程請求寫入一些數據到某通道,但不須要等待它徹底寫入,這個線程同時能夠去作別的事情。
- 選擇器
NIO通訊框架有Mina、Netty、Grizzly
https://blog.csdn.net/wang_snake/article/details/79249972github
BIO、NIO、AIO區別
https://blog.csdn.net/guanghuichenshao/article/details/79375967編程
網絡編程
https://h2pl.github.io/categories/後端/Java網絡編程與NIO/page/2/後端