字節流 | 字符流 | |
輸入流 | InputStream | Reader |
輸出流 | OutputStream | Writer |
以上四個流都是抽象流)(但不是抽象類),一般咱們使用的都是它們的子類(注意是一般,這四個抽象類也能用,只是用得少)。java
而實際編程中會使用到的:編程
字節流 | 字符流 | |
輸入流 | FileInputStream(文件(字節)輸入流) | FileReader |
輸出流 | FileOutputStream | FileWriter |
字節流 | 字符流 | |
輸入流 | BufferedInputStream | BufferedReader |
輸出流 | BufferedOutputStream | BufferedWriter |
緩衝流能夠提升數據傳輸的速度數組
輸入流 | InputStreamReader(字節流轉換成字符流) | OutputStreamReader |
輸出流 | InputStreamWriter | OutputStreamWriter |
用處例子:編程實現把用戶從鍵盤輸入的字符保存到一個String對象中。app
數據流 | |
輸入流 | DataInputStream(數據輸入流) |
輸出流 | DataOutputStream(數據輸出流) |
數據流能夠把基本類型數據的二進制直接讀入或寫出。url
用處例子:編程實現把long類型數據寫入到byte數組。 而後再從byte數組中把該數據讀出。spa
Print流 | |
輸入流 | PrintStream |
輸出流 | PrintWriter |
Print流能夠把基本數據類型的數據格式化後的字符串輸出。code
用處例子:編程實現把鍵盤輸入的數據寫入A文件,若是輸入有誤,則把出錯信息寫入B文件。對象
注意:ci
字節輸出流(OutputStream)和Print流不能同時使用,若是同時使用的話會報錯。字符串
Object流 | |
輸入流 | ObjectInputStream |
輸出流 | ObjectOutputStream |
Object流能夠把一個對象直接寫入或讀出。
這六種流每每是一套組合拳,舉例:
// 使用IO流讀取數據 BufferedReader buffer = new BufferedReader(new InputStreamReader(urlConn .getInputStream())); while ((line = buffer.readLine()) != null) { sb.append(line); }
獲取字符序列後,經過InputStreamReader將字符序列轉換成字節序列,可是因爲字節序列不方便被操做,因此再套在BufferedReader(緩衝輸入流)上。由於緩衝輸入流這個類中有readLine()這個成員方法,這個方法能夠一行一行地讀取文件中的數據。