字節流

                              [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文件中


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章