1. 程式人生 > >徹底明白java的位元組流和字元流(轉)

徹底明白java的位元組流和字元流(轉)

java的IO流分兩種流

位元組流 InputStream OutputStream

字元流 Reader Writer

他們都是抽象類

具體實現
位元組流 FileInputStream FileOutputStream
字元流 FileReader FileWriter
字元流處理的單元為2個位元組的Unicode字元,分別操作字元、字元陣列或字串,而位元組流處理單元為1個位元組,操作位元組和位元組陣列。所以字元流是由Java虛擬機器將位元組轉化為2個位元組的Unicode字元為單位的字元而成的,所以它對多國語言支援性比較好!如果是音訊檔案、圖片、歌曲,就用位元組流好點,如果是關係到中文(文字)的,用字元流好點.
所有檔案的儲存是都是位元組(byte)的儲存,在磁碟上保留的並不是檔案的字元而是先把字元編碼成位元組,再儲存這些位元組到磁碟。在讀取檔案(特別是文字檔案)時,也是一個位元組一個位元組地讀取以形成位元組序列.
位元組流可用於任何型別的物件,包括二進位制物件,而字元流只能處理字元或者字串; 2. 位元組流提供了處理任何型別的IO操作的功能,但它不能直接處理Unicode字元,而字元流就可以。

位元組流轉換成字元流可以用 InputSteamReader OutputStreamWriter

轉換成BufferdReader BufferedWriter 他們具有緩衝區

例如:讀取檔案 從位元組流輸入到字元流輸入
定義一個位元組流:

// 定義一個指向D:/TEXT.TXT 的位元組流
FileInputStream fileInputStream = new FileInputStream("d:/text.txt"); 


//位元組流轉換成InputStreamReader 
InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream);

//InputStreamReader 轉換成帶快取的bufferedReader 
BufferedReader bufferedReader = new BufferedReader(inputSteamReader); 可以把讀出來的內容賦值給字元 String ss = new String(); String s; while((s = bufferedReader.readLine())!=null){ ss += s; }

例如:寫入檔案 從位元組流輸出到字元流輸出

FileOutputStream fileOutputStream = new FileOutputStream("d:/text.txt"); //定義一個指向D:/TEXT.TXT檔案 

OutputStreamWriter outputStreamWriter = new OutputStreamWriter(fileOutputStream); 

BufferedWriter bufferedWriter = new BufferedWriter(outputStreamWriter); 

bufferedWriter.write(s); 

bufferedWriter.close(); 
outputStreamWriter.close(); 
fileOutputStream.close();


----------
[java中的IO操作](http://www.zaojiahua.com/1453.html) 這個也不錯