天天看點

位元組流

                              [14]位元組流

一.位元組流

1.什麼是位元組流

是IO流中的一種, 可以用來讀寫位元組資料.

2.位元組流和字元流的差別

計算機中存儲任何資料都是以位元組的形式, 是以位元組流可以讀寫任意類型的資料.

在讀寫的資料是字元的時候, 用字元流更友善.

3.什麼時候用位元組流, 什麼時候用字元流

當從一個文本檔案中讀取資料, 在程式中當作字元使用時, 或者寫出一段字元資料到檔案中時, 使用字元流比較友善.

字元流讀取資料就是字元, 字元流可以直接寫出字元

如果隻是讀寫資料, 不轉為字元, 那麼就都可以使用位元組流.

4.read()方法為什麼傳回int

Reader.read() 讀取一個字元, 傳回int

InputStream.read() 讀取一個位元組, 傳回int

為什麼不是傳回char和byte呢?

Reader.read() 如果傳回char, 那麼無法表示流末尾, 因為所有的char都有可能在流中出現. 

在read方法内部, 将讀取到的char裝入int, 這時正常資料不受影響, 強轉回char之後直接使用, 也可以傳回-1代表流末尾了.

InputStream.read() 如果傳回byte, 也是無法表示流末尾的, 因為從-128到127中所有值都有可能在流中出現.

在read方法内部, 是将讀取到的位元組&255, 正數沒有任何變化, 負數轉為了正數, 這時就可以用-1表示檔案末尾了

在真正使用資料時, 隻要将轉換後的數強轉回byte即可

5.使用位元組流拷貝檔案

使用FileInputStream和FileOutputStream, 逐個位元組拷貝. 效率很低, 不推薦.

* 使用FileInputStream和FileOutputStream, 定義數組作為緩沖區, 一次讀取一個數組, 一次寫出一個數組, 提高效率.

* 使用BufferedInputStream和BufferedOutputStream, 逐個位元組拷貝, 但其内部使用了緩沖機制, 速度較快.

二.轉換流

* 1.InputStreamReader

當擷取了一個位元組輸入流, 希望從中讀取字元資料時, 可以把位元組輸入流轉為字元輸入流InputStreamReader

當讀取非平台預設編碼的字元檔案時, FileReader做不到, 隻能使用InputStreamReader.

* 2.OutputStreamWriter

當擷取了一個位元組輸出流, 希望向外寫出字元資料時, 可以把位元組輸出流轉為字元輸出流OutputStreamWriter

當寫出非平台預設編碼的字元檔案時, FileWriter做不到, 隻能使用OutputStreamWriter

三.标準輸入輸出流

1.System.in

标準輸入流, InputStream, 可以從鍵盤輸入讀取位元組.

可以使用System.setIn(InputStream)改變标準輸入流的資料源.

2.System.out

标準輸出流, PrintStream, 可以向螢幕輸出資料.

可以使用System.setOut(PrintStream)改變标準輸出流的資料目的地. 

四.練習

1.對檔案進行加密.

2.讀寫UTF-8檔案.

3.從鍵盤輸入讀取學生考試成績, 對其進行排序, 将結果輸出到stu.txt檔案中

繼續閱讀