| 電腦中的資料都是以0與1的方式來儲存,如果您要在兩個裝置之間進行資料的存取,當然也是以0與1位元的方式來進行,實際上資料的流動是透過電路,而上面
的資料則是電流,而在程式上來說,將資料目的地與來源之間抽象化為一個串流(Stream),而當中流動的則是位元資料。 01010101 Stream -->
來源地 ===================== 目的地 在Java中有兩個類別用來作串流的抽象表示:InputStream與OutputStream。 InputStream是所有表示位元輸入串流的類別之父類別,它是一個抽象類別,子類會重新定義它當中所定義的方法, InputStream用於從裝置來源地讀取資料的抽象表示,例如System中的標準輸入串流 in 物件就是一個 InputStream,在程式開始之後,這個串流物件就會開啟,以從標準輸入裝置中讀取資料,這個裝置通常是鍵盤或是其它使用者定義的裝置。 OutputStream是所有表示位元輸出串流的類別之父類別,它是一個抽象類別,子類會重新定義它當中所定義的方法, OutputStream是用於將資料寫入目的地的抽象表示,例如System中的標準輸出串流物件 out ,out 的類型是PrintStream, 這個類別是OutputStream的子類別(FilterOutputStream繼承OutputStream, PrintStream再繼承FilterOutputStream),在程式開始之後,這個串流物件就會開啟,您可以將資料透過它來寫入目的地裝置,這 個裝置通常是螢幕或其它使用者定義的裝置。 下面程式可以讀取鍵盤輸入串流,並將資料以10進位方式顯示在螢幕上:
package onlyfun.caterpillar; 執行結果:
字元A輸入後被標準輸入串流讀取,A的位元表示以十進位來看就是65,這是A字元的編碼(查查ASCII編碼表就知道了),在這邊要注意的是read()只讀取一個位元組的資料,而當輸入A並按Enter鍵時,實際上在串流中會有A的位元資料與換行字元的位元資料,換行字元的位元資料以十進位來表示的話就是10。 作業系統之間的換行字元各不相同,Windows 為"\r\n",Linux 為'\n',而 Mac 為'\r'。 |