Java-IO流系列-轉換流
阿新 • • 發佈:2021-06-27
轉換流
什麼是轉換流
轉換流提供了在位元組流和字元流之間的轉換
Java API提供了兩個轉換流:
-
InputStreamReader: 將InputStream轉換為Reader
-
OutputStreamWriter:將Writer轉換為OutputStream
-
位元組流中的資料都是字元時,轉成字元流操作更高效。
-
很多時候我們使用轉換流來處理檔案亂碼問題。實現編碼和解碼的功能
轉換流的使用
輸入流
-
轉換流:
- InputStreamReader:將- -個位元組的輸入流轉換為字徒的輸入流
- outputstreamwriter:將-一個字元的輸出流轉換為位元組的輸出流
-
作用:提供位元組流與字元流之間的轉換
-
編碼與解碼
- 解碼:位元組、位元組陣列--->字元陣列、 字串
- 編碼:字元陣列、字串--->位元組,位元組陣列
-
InputStreamReader的引數2指明瞭字符集,具體使用哪個字符集,取決於檔案test.txt儲存時使用的字符集 InputStreamReader預設是系統的編碼
-
注意此時仍應該用try-catch塊
package com.dreamcold.io; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; public class Demo12 { public static void main(String[] args) throws IOException { FileInputStream fis=new FileInputStream("test.txt"); InputStreamReader isr=new InputStreamReader(fis,"UTF-8"); char[] cbuf=new char[20]; int len; while ((len=isr.read(cbuf))!=-1){ String str=new String(cbuf,0,len); System.out.println(str); } isr.close(); } }
- 結果如下:
綜合使用InputStreamReader和utputstreamWriter
package com.dreamcold.io; import java.io.*; public class Demo13 { public static void main(String[] args) throws IOException { File file1=new File("test.txt"); File file2=new File("test2-gbk.txt"); FileInputStream fis=new FileInputStream(file1); FileOutputStream fos=new FileOutputStream(file2); InputStreamReader isr=new InputStreamReader(fis,"UTF-8"); OutputStreamWriter osw=new OutputStreamWriter(fos,"GBK"); char[] buf=new char[10]; int len; while ((len=isr.read(buf))!=-1){ osw.write(buf,0,len); } isr.close(); osw.close(); } }
效果: