流是一組有序的資料序列,根據操作類型,可以分為輸入流和輸出流兩種,Java語言中定義的負責各種輸入輸出的類都被放在java.io包中。其中所有的輸入流類都是抽象類InputStream(位元組輸入流)或抽象類Reader(字元輸入流)的子類;而所有的輸出流都是抽象類OutStream(位元組輸出流)或抽象類Writer(字元輸出流)的子類。
一. 輸入流
1. InputStream類是位元組輸入流的抽象類,是所有位元組輸入流的父類,其層次結構為:
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIx0DciV2dmADM30zd-cmbw5CRzUCRzUydaVnQuxEMVpXT0EkeNFDMp5UerRUTxcGRNVTQE5UejRUT1UERNlHMD5UNjRlT6NGVNZ3YE1UNFRUT5hzQOVzYU5kejRVT2NmMiNnSywEd5ITW110MaZHetlVdO1GT0UERNl3YXJGc5kHT20ESjBjUIF2Lc12bj5SYphXa5VWen5WY35iclN3Ztl2Lc9CX6MHc0RHaiojIsJye.png)
圖1 InputStream類的層次結構
該類中所有方法遇到錯誤都會引發IOException異常,簡要說明部分方法:
- read()方法:從輸入流中讀取資料的下一個位元組。傳回0~255範圍内的int位元組值。如果因為已經到達流末尾而沒有可用的位元組,則傳回-1.
- read(byte[] b):從輸入流中讀入一定長度的位元組,并以整數的形式傳回位元組數。
- mark(int readlimit)方法:在輸入流的目前位置放置一個标記,readlimit參數告知此輸入流在标記位置失效之前允許讀取的位元組數。
- reset()方法:将輸入指針傳回到目前所做的标記處。
- skip(long n)方法:跳過輸入流上的n個位元組并傳回實際跳過的位元組數。
- markSupported()方法:如果目前流支援mark()/reset()操作就傳回True。
- close()方法:關閉此輸入流并釋放與該流關聯的所有系統資源。
2. Reader類是字元輸入流的抽象類,所有的字元輸入流都是它的子類,其層次結構為:
圖2 Reader類的層次結構
Reader類中方法與InputStream類中的方法類似。
二. 輸出流
1. OutputStream類是位元組輸出流的抽象類,此抽象類是表示輸出位元組流的所有類的超類,其層次結構為:
圖3 OutputStream類的層次結構
OutputStream類中的所有方法均傳回void,在遇到錯誤時引發IOException異常,簡單說明部分方法:
- write(int b)方法:将指定的位元組寫入此輸出流。
- write(byte[] b)方法:将b個位元組從指定的byte數組寫入此輸出流。
- write(byte[] b, int off, int len)方法:将指定byte數組中從偏移量off開始的len個位元組寫入此輸出流。
- flush()方法:徹底完成輸出并清空緩存區。
- close()方法:關閉輸出流。
2. Write類是字元輸出流的抽象類,所有的字元輸出類都是它的子類,其層次結構為:
圖4 Writer類的層次結構
在學習過程中做做筆記。