流的概述

1、流的定義: 數據的有序集合,能從一個地方傳輸到另一端的過程。
2、流的本質: 數據傳輸
3、流的劃分:
(1)按照方向:
輸入流: 從磁盤(存儲介質)---------->當前程序(內存)的過程
基類: InputStream 、 Reader
輸出流: 從當前程序(內存)---------->磁盤的過程(存儲介質)
基類: OutputStrem 、 Writer
(2)按照操作單元
字節流 : 二進制表示的數據,一個字節8個bit
基類: InputStream 、 OutputStream
字符流 : 將數據以字符形式表示,例如‘a’ ‘b’ 1、2、3
基類: Reader 、 Writer
(3)按照角色劃分:
節點流(介質流):低級流,連接程序和儲存介質的流
處理流(高級流):和節點流直接相連的流,

              抽象基類:      節點流(文件流)     緩衝流(節點流的一種)      轉化流 (指定編碼解碼)

字節流   InputStream    FileInputStream        BufferedInputStream          InputSreamReader
字節流   OutStream      FileOutputSteam       BufferedOutputStream       OutputStreamWriter
  字節流可以用與讀寫視頻文件 圖片文件、音頻文件等

字符流    Reader              FileReader             BufferedReader
 字符流   Writer                FileWriter                BufferedWriter
    字符流只能用於讀寫字符數據

4、字節流、字符流的區別:
字節: 存儲的是0101
字符: 存儲的字符,

(1) 讀寫單元不同:
字節流以字節(8 bit) 爲單位
字符流以字符爲單位,
(2)處理對象不同
字節流可操作所有類型的文件(視頻、圖片、音樂…)
字符流只能操作字符類型的文件,
(3)處理效率不同
字節流效率高,
字符流效率低,因爲要涉及到編碼解碼
(4) 可移植性
字節流高,與平臺無關
字符流低,

5、字節和字符的相互轉換 (亂碼問題)
原因分析:
字節數組容量太小,最後幾個字節包含了一個字符的部分字節。
開始的指針不在某個字符的開始字節上。
解碼、譯碼的碼錶不匹配

(1)編碼解碼;
字符 ----->字節:   編碼過程    
 byte[] b = "abc".getBytes() ;   //返回的是一個byte類型的數組{96,97,98}

字節------>字符: 解碼過程

byte[] b = {96,97,98} ;
String str = new String(b);  //返回的是一個字符串 “abc”

(2)碼錶:
ASCII碼 :一個字符的七位表示 ,對應的字節都是整數,0-xxxxxxx
ISO-8899-1 :拉丁碼錶,以一個字節的8爲表示,可以表示整數和負數,(最高位表示符號)
GBK :中文碼錶,用兩個字節表示,2個字節中,第一個字節最高位爲1,第二個字節的最高位爲0;
Unicode :國際標準碼:無論什麼文字,都是兩個字節
UTF-8 :基於Unicode,一個字節表示存儲信息,每個字節頭加入了編碼信息
(2)編碼類:Charset

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