徹底明白java的位元組流和字元流(轉)
阿新 • • 發佈:2019-01-25
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) 這個也不錯