1. 程式人生 > >位元組與字元,位元組流與字元流

位元組與字元,位元組流與字元流

位元組(byte)
一個位元組是8位(bit),一個位代表0/1。即二進位制
1KB=1024byte
1MB=1024*1024byte

ASCII碼  字母佔1位元組,漢字佔2位元組,一個二進位制數字是0-255

(數字: 48-57
小寫字母: 97-122
大寫字母: 65-90)
UTF-8編碼  1個英文字元等於1位元組,中文等於3位元組(常用的漢字佔3個,超大字元漢字佔4個)

unicode    一個英文2個位元組,中文也是2個位元組

(Unicode 是一種字元編碼,為了解決傳統的字元編碼方案的侷限,它為每種語言中的每個字元設定了統一併且唯一的二進位制編碼,以滿足跨語言、跨平臺進行文字轉換、處理的要求)

標點符號   英文標點佔1位元組,中文標點佔2個位元組  

字元是字母數字符號等的統稱,沒有特殊的意義

字元流與位元組流

都是java流,程式需要資料時需要輸入流,要儲存資料的時候,用輸出流。

java.io包中操作檔案內容的主要有兩大類:位元組流、字元流,兩類都分為輸入和輸出操作。在位元組流中輸出資料主要是使用OutputStream完成,輸入使的是InputStream,在字元流中輸出主要是使用Writer類完成,輸入流主要使用Reader類完成。(這四個都是抽象類)

   InputStream 和OutputStream,兩個是為位元組流設計的,主要用來處理位元組或二進位制物件,


  Reader和 Writer.兩個是為字元流(一個字元佔兩個位元組)設計的,主要用來處理字元或字串.

字元處理單元為2個位元組的unicode字元,分別操作字元,字元陣列或字串,位元組流處理單元為1個位元組,操作位元組和位元組陣列,所以字元流是java虛擬機器講位元組轉化為2個位元組的unicode字元為單位的字元而成,對語言國際化支援較好,所以涉及到中文(文字)的,用字元流好一點,其他的音訊,圖片,歌曲,可以用位元組流。


 1、位元組流可以用於任何物件,包括二進位制物件,而字元流只能處理字元或者字串
 2、位元組流提供了處理任何型別的IO操作的功能,但不能直接處理Unicode字元,而字元流可以
 
 Javaqq中操作流程
 1、使用File開啟檔案
 2、通過位元組流或者字元流的子類,制定輸出的位置
 3、進行讀寫操作
 4、關閉輸入輸出
 
 位元組流主要操作布特資料型別,以byte資料組為準,主要操作類是抽象類OutputStreeam,InputStream
 字元流 兩個字元流的類是Reader、Writer
 

因為存在編碼問題,所以有的字元流,本質是,讀取了位元組流,再去讀取對應的編碼表,返回查到的字元位元組流可以處理所有型別的資料,圖片。MP3。avi等,字元流只能處理純字元資料,如純文字資料,優先考慮字元流,其他的用位元組流
 
 位元組流在操作時候本實施不會用到緩衝區(記憶體)的,而是與檔案本身直接操作,而字元流操作時用到緩衝區
 位元組流在操作檔案時,及時不關閉資源(close方法),檔案也能輸出,字元流不適用close方法,則不會輸出檔案內容,說明字元流用的是快取區,flush方法可以強制重新整理快取區,這樣才能不close方法的情況下輸出內容