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