Java IO中轉換流的作用
阿新 • • 發佈:2018-10-16
utf except image code 需要 cep inf java網絡編程 解析
在《Java網絡編程》中,有這樣一段話:
”Reader和Writer最重要的子類是InputStreamReader和OutputStreamWriter類。
InputStreamReader類包含了一個底層輸入流,可以從中讀取原始字節。它根據指定的編碼方式,將這些字節轉換為Unicode字符。
OutputStreamWriter從運行的程序中接收Unicode字符,然後使用指定的編碼方式將這些字符轉換為字節,再將這些字節寫入底層輸出流中。“
轉換流的特點:
1. 其是字符流和字節流之間的橋梁
2. 可對讀取到的字節數據經過指定編碼轉換成字符
3. 可對讀取到的字符數據經過指定編碼轉換成字節
什麽時候使用轉換流呢?
1,源或者目的對應的設備是字節流,但是操作的卻是文本數據,可以使用轉換作為橋梁。提高對文本操作的便捷。 參見示例1-1 1-2
2,一旦操作文本涉及到具體的指定編碼表時,必須使用轉換流 。參見示例2-1 2-2
關於指定編碼表的作用,建議參考這篇文章從內存角度解析Java字符編碼,一定會豁然開朗的。
具體的對象體現:
1. InputStreamReader:字節到字符的橋梁
2. 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(); }
轉載 https://blog.csdn.net/u013905744/article/details/51924258/
Java IO中轉換流的作用