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