溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Java中IO流的詳細(xì)介紹

發(fā)布時(shí)間:2021-07-30 13:39:10 來源:億速云 閱讀:145 作者:chen 欄目:開發(fā)技術(shù)

這篇文章主要介紹“Java中IO流的詳細(xì)介紹”,在日常操作中,相信很多人在Java中IO流的詳細(xì)介紹問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Java中IO流的詳細(xì)介紹”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!

一、Java中IO流分為幾種?

  • 按照流的流向分,可以分為輸入流和輸出流;

  • 按照操作單元分,可以分為字節(jié)流和字符流(字節(jié)流可以讀寫任何單位的數(shù)據(jù),字符流只可以讀寫txt數(shù)據(jù));

  • 按照流的角色分,可以分為節(jié)點(diǎn)流和處理流;

二、IO中flush()和close()的區(qū)別

close()方法具備刷新功能,在關(guān)閉流之前就會先刷新緩沖區(qū),將緩沖區(qū)的字節(jié)全部刷新到文件上,在關(guān)閉流。(close()方法包含一次flush()方法)

flush()方法可以刷新,并且刷新之后可以繼續(xù)寫,而close()方法刷新之后就不能繼續(xù)寫了。

三、BIO、NIO、AIO有什么區(qū)別?

簡答:

  • BIO:Block IO 同步阻塞式IO,就是我們平時(shí)使用的傳統(tǒng)IO,特點(diǎn)是模式簡單使用方便,但是并發(fā)處理能力低;

  • NIO:Non IO 同步非阻塞IO,傳統(tǒng)IO的升級,客戶端與服務(wù)端通過Channel(通道)通訊,實(shí)現(xiàn)了多路復(fù)用;

  • AIO:Asynchronous IO 異步非阻塞IO,異步IO的操作基于事件和回調(diào)機(jī)制。

詳細(xì)回答:

  • BIO (Blocking I/O): 同步阻塞I/O模式,數(shù)據(jù)的讀取寫入必須阻塞在一個(gè)線程內(nèi)等待其完成。在活動連接數(shù)不是特別高(小于單機(jī)1000)的情況下,這種模型是比較不錯(cuò)的,可以讓每一個(gè)連接專注于自己的 I/O 并且編程模型簡單,也不用過多考慮系統(tǒng)的過載、限流等問題。線程池本身就是一個(gè)天然的漏斗,可以緩沖一些系統(tǒng)處理不了的連接或請求。但是,當(dāng)面對十萬甚至百萬級連接的時(shí)候,傳統(tǒng)的 BIO 模型是無能為力的。因此,我們需要一種更高效的 I/O 處理模型來應(yīng)對更高的并發(fā)量。

  • NIO (New I/O): NIO是一種同步非阻塞的I/O模型,在Java 1.4 中引入了NIO框架,對應(yīng) java.nio 包,提供了 Channel , Selector,Buffer等抽象。NIO中的N可以理解為Non-blocking,不單純是New。它支持面向緩沖的,基于通道的I/O操作方法。 NIO提供了與傳統(tǒng)BIO模型中的 Socket 和 ServerSocket 相對應(yīng)的 SocketChannel 和 ServerSocketChannel 兩種不同的套接字通道實(shí)現(xiàn),兩種通道都支持阻塞和非阻塞兩種模式。阻塞模式使用就像傳統(tǒng)中的支持一樣,比較簡單,但是性能和可靠性都不好;非阻塞模式正好與之相反。對于低負(fù)載、低并發(fā)的應(yīng)用程序,可以使用同步阻塞I/O來提升開發(fā)速率和更好的維護(hù)性;對于高負(fù)載、高并發(fā)的(網(wǎng)絡(luò))應(yīng)用,應(yīng)使用 NIO 的非阻塞模式來開發(fā)

  • AIO (Asynchronous I/O): AIO 也就是 NIO 2。在 Java 7 中引入了 NIO 的改進(jìn)版 NIO 2,它是異步非阻塞的IO模型。異步 IO 是基于事件和回調(diào)機(jī)制實(shí)現(xiàn)的,也就是應(yīng)用操作之后會直接返回,不會堵塞在那里,當(dāng)后臺處理完成,操作系統(tǒng)會通知相應(yīng)的線程進(jìn)行后續(xù)的操作。AIO 是異步IO的縮寫,雖然 NIO 在網(wǎng)絡(luò)操作中,提供了非阻塞的方法,但是 NIO 的 IO 行為還是同步的。對于 NIO 來說,我們的業(yè)務(wù)線程是在 IO 操作準(zhǔn)備好時(shí),得到通知,接著就由這個(gè)線程自行進(jìn)行 IO 操作,IO操作本身是同步的。查閱網(wǎng)上相關(guān)資料,我發(fā)現(xiàn)就目前來說 AIO 的應(yīng)用還不是很廣泛,Netty 之前也嘗試使用過 AIO,不過又放棄了。

四、Files的常用方法有哪些?

  • Files.exist():檢測文件路徑是否存在

  • Files.createFiles():創(chuàng)建文件

  • Files.createDirectory():創(chuàng)建文件夾

  • Files.delete():刪除一個(gè)文件或目錄

  • Files.copy():復(fù)雜文件

  • Files.move():移動文件

  • Files.size():查看文件個(gè)數(shù)

  • Files.read():讀取文件

  • Files.write():寫入文件

到此,關(guān)于“Java中IO流的詳細(xì)介紹”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI