Java IO系統詳細解析__Java

來源:互聯網
上載者:User

Java的IO系統是用來進行輸入和輸出的,Java系統本身提供了非常豐富的類庫,利用這些類庫幾乎可以進行一切

的IO操作,但要徹底弄明白這些類的用法和它們之間的關係卻並還容易,筆者總結了一些學習Java IO的思路,

希望對大家能有協助。
一、明白Input、Output、Read、Write、Stream的含義。

         很多時候在Java中使用IO的時候,都是這幾個關鍵字交叉混合使用,一不小心就容易弄迷,要明這四個關鍵字,就要把握住一點,Java中IO的所有操作就是兩類,輸入和輸出,而所謂的輸入、輸出都是站在程式的角度而言的。


          比如要通過一個程式,往硬碟中寫入一個檔案,對程式而言,肯定是程式在源源不斷的把資料往硬碟上放,對程式而言它是在Output,也就是在往出Write,所以Output總是Write對應,表達的是輸出的意思。


        反過來,要通過一個程式把記憶體中的資料取出來,那麼程式要做的工作就是源源不斷的把記憶體中的資料往外拿,就要不斷的去讀,從程式的角度看,是有資料不斷的往程式裡放,這樣就是Input,它在Input的時需要不斷的Read,所以Input總是Read對應。


          stream代表的是任何有能力產出資料的資料來源,或是任何有能力接收資料的接收源。在Java的IO中,所有的stream都包括Input和Output兩種類型。

 

二、JavaIo的分類
2.1對IO的分類:
 所有JavaIO都可以分成兩類:
 輸入資料流:
 輸出資料流:
2.2對輸入輸出的分類:
 所有的輸入資料流、輸出資料流都可以分為位元組(輸入、輸出)流,字元(輸入、輸出)流,處理位元組的主要是(OutputStream/InputStream) 系列,處理字元的,主要是(Reader/Write)系列
 
2.2.1以位元組(Byte)為導向的輸入資料流(InputStream系列):
1) ByteArrayInputStream:把記憶體中的一個緩衝區作為InputStream使用
2) StringBufferInputStream:把一個String對象作為InputStream
3) FileInputStream:把一個檔案作為InputStream,實現對檔案的讀取操作
4) PipedInputStream:實現了pipe的概念,主要線上程中使用
5) SequenceInputStream:把多個InputStream合并為一個InputStream

2.2.2以位元組(Byte)為導向的輸出資料流(OutputStream系列):
1) ByteArrayOutputStream:把資訊存入記憶體中的一個緩衝區中
2) FileOutputStream:把資訊存入檔案中
3) PipedOutputStream:實現了pipe的概念,主要線上程中使用
4) SequenceOutputStream:把多個OutStream合并為一個OutStream


 2.2.3以Unicode字元為導向的輸入資料流(Reader系列):

1) CharArrayReader:與ByteArrayInputStream對應
2) StringReader:與StringBufferInputStream對應
3) FileReader:與FileInputStream對應
4) PipedReader:與PipedInputStream對應

2.2.4以Unicode字元為導向的輸出資料流(Write系列):

1) CharArrayWrite:與ByteArrayOutputStream對應
2) StringWrite:無與之對應的以位元組為導向的stream
3) FileWrite:與FileOutputStream對應
4) PipedWrite:與PipedOutputStream對應


2.3對所有流的修飾、轉換、封裝而設定的流(Filter系列)

   “修飾”流(這是我在這裡起的一個形象的名字,文獻中沒有這種叫法)

輸入系列:

2.3.1 用於封裝以位元組為導向的,以下主要是用來修飾InputStream系列的各種輸入

1) DataInputStream:      從stream中讀取基本類型(int、char等)資料。
2) BufferedInputStream:  使用緩衝區
3) LineNumberInputStream:會記錄input stream內的行數,然後可以調用getLineNumber()和setLineNumber(int)
4) PushbackInputStream:   很少用到,一般用於編譯器開發


2.3.2 用於封裝以字元為導向的,以下主要是用來修飾Reader系列的各種輸入
1) 沒有與DataInputStream對應的類。除非在要使用readLine()時改用BufferedReader,否則使用

DataInputStream
2) BufferedReader:與BufferedInputStream對應
3) LineNumberReader:與LineNumberInputStream對應
4) PushBackReader:與PushbackInputStream對應


輸出系列:

2.3.3 用於封裝以位元組為導向的,主要用來修飾OutputStream系列的各種輸出
1) DataIOutStream:往stream中輸出基本類型(int、char等)資料。
2) BufferedOutStream:使用緩衝區
3) PrintStream:產生格式化輸出

2.3.4 用於封裝以字元為導向的,主要用來修飾Write系列的各種輸出
1) BufferedWrite:與對應
2) PrintWrite:與對應


三、一個特殊的類:RandomAccessFile
針對這個類,記住以下幾點:
1) 可通過RandomAccessFile對象完成對檔案的讀寫操作
2) 在產生一個對象時,可指明要開啟的檔案的性質:r,唯讀;w,唯寫;rw可讀寫
3) 可以直接跳到檔案中指定的位置

四、總結:

4.1、節點流類型(一根管直接插到下面的類型上,下面的管道指的是線程和線和之間的通訊)
 
4.2、分類表:
類型                字元流                    位元組流
File                FileReader    FileInputStream 

                        FileWriter    FileOutputStream
 
Memory Array      CharArrayReader  ByteArrayInputStream 
                                CharArrayWriter  ByteArrayOutputStream

 

Memory String          StringReader   StringWriter  

 

Pipe(管道)              PipedReader   PipedInputStream 
                                PipedWriter   PipedOutputStream

4.3、緩衝流要"套接"在相應的節點流之上,對讀寫的資料提供了緩衝的功能,提高了讀寫的效
對於輸出的緩衝流,寫出的資料會先在記憶體中緩衝,使用flush方法將會使內在中的資料立刻寫出

 

4.4、轉換流
InputStreamReader和OutputStreamWriter用與位元組資料到字元資料之間的轉換
InputStreamReader需要和InputStream"套接"
OutputStreamReader需要和OutputStream"套接"


在下一篇文章中,會找一些關於JavaIO操作的實際代碼,可以參考學習

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.