Java IO流 筆記5 --- 轉換流
阿新 • • 發佈:2018-12-10
Reader 和 Writer 最重要的子類是 InputStreamReader和 OutputStreamWriter 類 --- Java 網路程式設計
InputStreamReader : 讀 --- 讀取原始位元組,將位元組轉為字元。
包含了一個底層輸入流,可以從中讀取原始位元組。它根據指定的編碼方式,將這些位元組轉換為Unicode字元
OutputStreamWriter :寫 --- 將字元轉為位元組,寫入 底層輸出流中
從執行的程式中接收Unicode字元,然後使用指定的編碼方式將這些字元轉換為位元組,再將這些位元組寫入底層輸出流中
轉換流的特點:
- 其是字元流和位元組流之間的橋樑
- 可對讀取到的位元組資料經過指定編碼轉換成字元
- 可對讀取到的字元資料經過指定編碼轉換成位元組
什麼時候使用轉換流:
源或者目的對應的裝置是位元組流,但是操作的卻是文字資料,可以使用轉換作為橋樑。提高對文字操作的便捷 參見示例1-1 1-2
一旦操作文字涉及到具體的指定編碼表時,必須使用轉換流 。參見示例2-1 2-2
具體的物件體現:
- InputStreamReader:位元組到字元的橋樑
- OutputStreamWriter:字元到位元組的橋樑
這兩個流物件是字元體系中的成員,它們有轉換作用,本身又是字元流,所以在構造的時候需要傳入位元組流物件進來
示例1-1:位元組流System.in轉為字元流BufferedReader
讀取鍵盤輸入的每一行內容,並寫入到文字中,直到遇到over行結束輸入
public static void main(String[] args) throws IOException { //位元組流-->字元流 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new FileWriter("is2.txt")); String line = null; while((line = br.readLine())!=null){ if("over".equals(line)){ break; } bw.write(line); bw.newLine(); bw.flush(); } bw.close(); br.close(); }
例項1-2 字元流BufferedReader轉為位元組流System.out
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new FileReader("is2.txt"));
//字元流-->位元組流
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
String line = null;
while ((line = br.readLine())!=null) {
bw.write(line);
bw.newLine();
bw.flush();
}
bw.close();
br.close();
}
示例2-1 採用指定的編碼讀取文字檔案
public static void main(String[] args) throws IOException {
//在IO流中,如果想指定編碼讀寫資料,只能使用轉換流。
//採用指定編碼從文字檔案中讀取內容
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("C:\\a.txt"), "UTF-8"));
String line = null;
while ((line=br.readLine())!=null) {
System.out.println(line);
}
br.close();
}
例項2-2 採用指定的編碼輸出文字檔案
public static void main(String[] args) throws IOException {
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream("C:\\a.txt"), "UTF-8"));
bw.write("I am 君山");
bw.close();
}