AndroidIO流位元組流與字元流的區別
阿新 • • 發佈:2019-02-13
程式執行結果:
此時,檔案中已經存在了內容,更進一步證明內容是儲存在緩衝區的。這一點在讀者日後的開發中要特別引起注意。
提問:使用位元組流好還是字元流好?
學習完位元組流和字元流的基本操作後,已經大概地明白了操作流程的各個區別,那麼在開發中是使用位元組流好還是字元流好呢?
回答:使用位元組流更好。
在回答之前,先為讀者講解這樣的一個概念,所有的檔案在硬碟或在傳輸時都是以位元組的方式進行的,包括圖片等都是按位元組的方式儲存的,而字元是隻有在記憶體中才會形成,所以在開發中,位元組流使用較為廣泛。
位元組流與字元流主要的區別是他們的的處理方式
流分類:
1.Java的位元組流
InputStream是所有位元組輸入流的祖先,而OutputStream是所有位元組輸出流的祖先。
2.Java的字元流
Reader是所有讀取字串輸入流的祖先,而writer是所有輸出字串的祖先。
InputStream,OutputStream,Reader,writer都是抽象類。所以不能直接new
位元組流是最基本的,所有的InputStream和OutputStream的子類都是,主要用在處理二進位制資料,它是按位元組來處理的
但實際中很多的資料是文字,又提出了字元流的概念,它是按虛擬機器的encode來處理,也就是要進行字符集的轉化
這兩個之間通過 InputStreamReader,OutputStreamWriter來關聯,實際上是通過byte[]和String來關聯
在實際開發中出現的漢字問題實際上都是在字元流和位元組流之間轉化不統一而造成的
在從位元組流轉化為字元流時,實際上就是byte[]轉化為String時,
public String(byte bytes[], String charsetName)
有一個關鍵的引數字符集編碼,通常我們都省略了,那系統就用作業系統的lang
而在字元流轉化為位元組流時,實際上是String轉化為byte[]時,
byte[] String.getBytes(String charsetName)
也是一樣的道理
至於java.io中還出現了許多其他的流,按主要是為了提高效能和使用方便,
如BufferedInputStream,PipedInputStream等