[十六]JavaIO之InputStreamReader 與 OutputStreamWriter
阿新 • • 發佈:2018-12-09
簡介
InputStreamReader OutputStreamWriter是轉換流 InputStreamReader 是位元組流通向字元流的橋樑,它將位元組流轉換為字元流. OutputStreamWriter是字元流通向位元組流的橋樑,它將字元流轉換為位元組流. 介面卡模式 Reader和Writer 是Target 被適配角色Adaptee是 InputStream / OutputStream |
被適配者都是通過構造方法傳遞進來的,所以是物件介面卡模式 |
編碼與解碼
經常說到編碼和解碼 也就是從字元到位元組,或者位元組到字元的轉換,轉換的規則就是按照指定的碼錶 有的時候可能會混淆,到底哪個方向才是編碼?哪個才是解碼? |
只要理解了碼的含義 指的是二進位制的 0 1 的數值序列 編碼表中都有字元對應的數值序列編碼 把字元從符號轉變成二進位制序列就是編碼 解碼就是轉換為指定的字元形式 |
位元組流和字元流之間的轉換,自然離不開編碼與解碼 計算機最底層資料的儲存是二進位制序列,也就是位元組 所以如果是從最底層讀取,那麼就是涉及二進位制到字元的解碼 從字元寫入到最底層,就是字元的編碼 |
InputStreamReader
StreamDecoder到底是什麼呢?
StreamDecoder繼承了Reader,所以他是一個Reader 另外他內部又包含了一個InputStream in; 這個in 通過他的forInputStreamReader系列方法,通過入參InputStream進行設定 |
StreamDecoder中提供的其他方法(除了forInputStreamReader系列) 又都依賴於內部的私有方法 這些私有方法又藉助於InputStream |
InputStreamReader小結
內部藉助StreamDecoder的實現過程作為了解 需要記住InputStreamReader 是一個轉換流,用於把InputStream轉換為Reader 也就是讓一個InputStream能夠以Reader的方式進行工作, InputStreamReader 繼承了Reader,所以他是一個Reader 他是Reader的實現類,提供了Reader協議常規的讀取方法以及配套方法 掌握了構造方法即可,其他方法語義同Reader中的約定public int read() throws IOException | 讀取單個字元,返回讀取到的字串 |
public int read(char cbuf[], int offset, int length) | 讀取字元到指定陣列cbuf[] ,從指定偏移量offset開始儲存,讀取length個 |
public boolean ready() | true表示下一個read()方法保證不會阻塞 |
public void close() throws IOException |