圖學java基礎篇之IO

java io體系


如圖能夠看出,java的io按照包來劃分的話能夠分爲三大塊:io、nio、aio,可是從使用角度來看,這三塊其實揉雜在一塊兒的,下邊咱們先來概述下這三塊:html

  • io:主要包含字符流和字節流,咱們經常使用的文件讀寫,流處理等都要用到,也是本次介紹的重點。jdk1.7以後的io底層部分類經已改成使用阻塞的nio實現了
  • nio:jdk1.4後加入,多路非阻塞(多路IO複用模型),此外還實現了buffer、channel、selector、內存映射文件等實現。咱們直接使用nio多數狀況用於網路編程。
  • aio:jdk1.7支持,又叫作nio2,實現了異步非阻塞io。較nio更高效,也主要用於網絡編程。

因爲本次主要介紹java基本的io類結構,io類的實現相對簡單(主要是字節或者字符數組的操做),而nio和aio更多時候咱們關注的是網絡編程,要想理解須要對unix網絡模型、異步和阻塞等有比較清晰的理解,所以並不會花大量篇幅介紹各個類,示例也僅會給出連接。
快寫完的時候看到的一篇,寫的贊,果真水平還差的遠:深刻分析 Java I/O 的工做機制java

io類結構


經常使用的類不在介紹,下邊主要介紹一些有特殊功能的類linux

PipedWriter,PipedReader

管道輸入流,熟悉linux系統應該看到pipe應該就明白了,能夠實現線程間通訊,須要和PipedReader配套使用。詳解和示例編程

FilterReader,FilterWriter

根據名字也能看出來,目的事項實現一個流過濾器,可是你會發現實際上是個抽象類,並無實現,這裏只是提供了接口。掃了一下發現jdk裏邊只有Utility的一個JavaWriter的靜態類實現了,其功能是將字節轉換成有效的java字符。數組

CharArrayReader,CharArrayWriter

將字節數組做爲輸入或輸出流處理,通常做爲中間值,用來將字符數組和其餘IO字符處理類轉換。下邊的ByteArrayInputStream與此相似,不過處理的是字節數組。詳解和示例網絡

PushbackReader,PushbackInputStream

具備回推功能的IO處理類,能夠將已讀取過的數據再回推到緩衝區中,重複讀取(注意通常的流都是單向的,一旦讀取出來就不能再讀了)。詳解和示例app

DataInputStream,DataOutputStream

提供了按照類型或編碼讀取寫入文件的方法,如byte[]、int、short、char、byte、UTF等類型或編碼的讀寫。詳解和示例dom

SequenceInputStream

如其名字:順序輸入流,改類容許將多個輸入流做爲輸入,並按照順序處理多個流,使用的時候當作一個流處理。詳解和示例異步

RandomAccessFile

該類與其餘IO類有較大不一樣,其支持隨機讀寫,對於格式化的記錄文件讀取頗有優點。此外因爲其底層的操做已經改成由nio的FileChannel實現,所以在處理大文件的時候常常使用RandomAccessFile和MappedByteBuffer來讀取,不只讀取速度更快,並且可以避免文件過大致使內存溢出。詳解和示例編碼

其餘參考博文(侵刪)

nio和aio相關


上圖是整理的nio與aio的一些關鍵點,瞟一眼就好,詳細的nio講解可參考: Java NIO使用及原理分析

相關文章
相關標籤/搜索