1、Java IO和NIO之間第一個區(qū)別是,IO是面向流的,NIO是面向緩沖區(qū)的。
Java IO面向流意味著每次都能從流中讀取一個或多個字節(jié)。從流中讀取多少字節(jié)完全取決于程序員。這些字節(jié)無法緩存到任何地方;也就是說,你不能從流中前后移動數(shù)據。如果你真的需要移動數(shù)據,你需要先在緩沖區(qū)緩存這些數(shù)據。
Java NIO對Buffer的看法稍有不同。當數(shù)據被讀取到buffer中時,buffer將在以后進行處理。如果您需要,您可以在buffer中移動數(shù)據;這使程序員在處理時更加靈活。但是,您必須檢查buffer中是否包含您需要處理的所有數(shù)據。此外,您必須確保讀取數(shù)據到達buffer時,您不能覆蓋未處理的數(shù)據。
阻塞與非阻塞IO
2、Java IO中的各種流被堵塞,Java NIO是非阻塞模式保證線程要求從channel中讀取數(shù)據。
Java IO中的各種流被堵塞,也就是說,當調用read()方法和write()方法時,線程會被堵塞,直到數(shù)據被讀取或完全寫入。在此期間,處理流的線程將無法完成。
Java NIO非阻塞模式保證線程要求從channel中讀取數(shù)據,直到此時channel才能使用,或者如果此時沒有數(shù)據可用,就什么也不做。而不是保存阻塞,直到數(shù)據可以讀取,這里線程可以做其他事情。
以上就是java io和nio的區(qū)別分析,主要體會在面向的對象、阻塞方面的不同,感興趣的小伙伴也可以找一些實例進行練習。更多關于“Java培訓”的問題,歡迎咨詢千鋒教育在線名師。千鋒已有十余年的培訓經驗,課程大綱更科學更專業(yè),有針對零基礎的就業(yè)班,有針對想提升技術的好程序員班,高品質課程助力你實現(xiàn)java程序員夢想。