Java之IO流面試題案例講解
一、Java中IO流分為幾種?
- 按照流的流向分,可以分為輸入流和輸出流;
- 按照操作單元分,可以分為字節(jié)流和字符流(字節(jié)流可以讀寫任何單位的數(shù)據(jù),字符流只可以讀寫txt數(shù)據(jù));
- 按照流的角色分,可以分為節(jié)點流和處理流;
二、IO中flush()和close()的區(qū)別
close()方法具備刷新功能,在關閉流之前就會先刷新緩沖區(qū),將緩沖區(qū)的字節(jié)全部刷新到文件上,在關閉流。(close()方法包含一次flush()方法)
flush()方法可以刷新,并且刷新之后可以繼續(xù)寫,而close()方法刷新之后就不能繼續(xù)寫了。
三、BIO、NIO、AIO有什么區(qū)別?
簡答:
- BIO:Block IO 同步阻塞式IO,就是我們平時使用的傳統(tǒng)IO,特點是模式簡單使用方便,但是并發(fā)處理能力低;
- NIO:Non IO 同步非阻塞IO,傳統(tǒng)IO的升級,客戶端與服務端通過Channel(通道)通訊,實現(xiàn)了多路復用;
- AIO:Asynchronous IO 異步非阻塞IO,異步IO的操作基于事件和回調(diào)機制。
詳細回答:
- BIO (Blocking I/O): 同步阻塞I/O模式,數(shù)據(jù)的讀取寫入必須阻塞在一個線程內(nèi)等待其完成。在活動連接數(shù)不是特別高(小于單機1000)的情況下,這種模型是比較不錯的,可以讓每一個連接專注于自己的 I/O 并且編程模型簡單,也不用過多考慮系統(tǒng)的過載、限流等問題。線程池本身就是一個天然的漏斗,可以緩沖一些系統(tǒng)處理不了的連接或請求。但是,當面對十萬甚至百萬級連接的時候,傳統(tǒng)的 BIO 模型是無能為力的。因此,我們需要一種更高效的 I/O 處理模型來應對更高的并發(fā)量。
- NIO (New I/O): NIO是一種同步非阻塞的I/O模型,在Java 1.4 中引入了NIO框架,對應 java.nio 包,提供了 Channel , Selector,Buffer等抽象。NIO中的N可以理解為Non-blocking,不單純是New。它支持面向緩沖的,基于通道的I/O操作方法。 NIO提供了與傳統(tǒng)BIO模型中的 Socket 和 ServerSocket 相對應的 SocketChannel 和 ServerSocketChannel 兩種不同的套接字通道實現(xiàn),兩種通道都支持阻塞和非阻塞兩種模式。阻塞模式使用就像傳統(tǒng)中的支持一樣,比較簡單,但是性能和可靠性都不好;非阻塞模式正好與之相反。對于低負載、低并發(fā)的應用程序,可以使用同步阻塞I/O來提升開發(fā)速率和更好的維護性;對于高負載、高并發(fā)的(網(wǎng)絡)應用,應使用 NIO 的非阻塞模式來開發(fā)
- AIO (Asynchronous I/O): AIO 也就是 NIO 2。在 Java 7 中引入了 NIO 的改進版 NIO 2,它是異步非阻塞的IO模型。異步 IO 是基于事件和回調(diào)機制實現(xiàn)的,也就是應用操作之后會直接返回,不會堵塞在那里,當后臺處理完成,操作系統(tǒng)會通知相應的線程進行后續(xù)的操作。AIO 是異步IO的縮寫,雖然 NIO 在網(wǎng)絡操作中,提供了非阻塞的方法,但是 NIO 的 IO 行為還是同步的。對于 NIO 來說,我們的業(yè)務線程是在 IO 操作準備好時,得到通知,接著就由這個線程自行進行 IO 操作,IO操作本身是同步的。查閱網(wǎng)上相關資料,我發(fā)現(xiàn)就目前來說 AIO 的應用還不是很廣泛,Netty 之前也嘗試使用過 AIO,不過又放棄了。
四、Files的常用方法有哪些?
- Files.exist():檢測文件路徑是否存在
- Files.createFiles():創(chuàng)建文件
- Files.createDirectory():創(chuàng)建文件夾
- Files.delete():刪除一個文件或目錄
- Files.copy():復雜文件
- Files.move():移動文件
- Files.size():查看文件個數(shù)
- Files.read():讀取文件
- Files.write():寫入文件
到此這篇關于Java之IO流案例講解的文章就介紹到這了,更多相關Java之IO流內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
原理分析SonarQube中IdentityProvider賬戶互斥現(xiàn)象
這篇文章主要為大家介紹分析SonarQube中IdentityProvider賬戶互斥現(xiàn)象原理,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步2022-02-02Java實現(xiàn)的properties文件動態(tài)修改并自動保存工具類
這篇文章主要介紹了Java實現(xiàn)的properties文件動態(tài)修改并自動保存工具類,可實現(xiàn)針對properties配置文件的相關修改與保存功能,需要的朋友可以參考下2017-11-11最簡單的Spring Cloud教程第一篇:服務的注冊與發(fā)現(xiàn)(Eureka)
這篇文章主要給大家介紹了關于Spring Cloud服務的注冊與發(fā)現(xiàn)(Eureka)的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用spring cloud具有一定的參考學習價值,需要的朋友們下面來一起看看吧。2017-08-08Spring?Security短信驗證碼實現(xiàn)詳解
本文主要介紹了Spring?Security短信驗證碼的實現(xiàn)詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-11-11