“Java有幾種文件拷貝方式,哪一種效率最高?” 這個問題是京東一面的時候,針對4年經驗的同學的一個面試題。 大家好,我是Mic,一個工作了14年的Java程式員。 關於這個問題的回答,我把文字版本整理到了15W字的面試文檔裡面。 大家可以在我的主頁加V領取。 下麵看看高手的回答。 高手: 第一種, ...
“Java有幾種文件拷貝方式,哪一種效率最高?”
這個問題是京東一面的時候,針對4年經驗的同學的一個面試題。
大家好,我是Mic,一個工作了14年的Java程式員。
關於這個問題的回答,我把文字版本整理到了15W字的面試文檔裡面。
大家可以在我的主頁加V領取。
下麵看看高手的回答。
高手:
第一種,使用java.io包下的庫,使用FileInputStream讀取,再使用FileOutputStream寫出。
第二種,利用java.nio包下的庫,使用transferTo或transfFrom方法實現。
第三種,Java 標準類庫本身已經提供了 Files.copy 的實現。
對於 Copy 的效率,這個其實與操作系統和配置等情況相關,在傳統的文件IO操作裡面,我們都是調用操作系統提供的底層標準IO系統調用函數 read()、write() ,由於內核指令的調用會使得當前用戶線程切換到內核態,然後內核線程負責把相應的文件數據讀取到內核的IO緩衝區,再把數據從內核IO緩衝區拷貝到進程的私有地址空間中去,這樣便完成了一次IO操作。
而NIO裡面提供的NIO transferTo和transfFrom方法,也就是常說的零拷貝實現。
它能夠利用現代操作系統底層機制,避免不必要拷貝和上下文切換,因此在性能上表現比較好。
總結
關於文件IO方面的問題和內容還挺多的這塊屬於Java裡面的基礎知識,但是隨著這個技術知識的延展,會涉及到NIO、AIO、零拷貝、IO多路復用機制等等。
對於求職者來說,這塊內容的重要性也不言而喻。
大家記得點贊收藏加關註!
版權聲明:本博客所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自
Mic帶你學架構
!
如果本篇文章對您有幫助,還請幫忙點個關註和贊,您的堅持是我不斷創作的動力。歡迎關註「跟著Mic學架構」公眾號公眾號獲取更多技術乾貨!