一、字節流轉換字符流
有時需要將字節流轉換爲字符流,InputStreamReader和OutputStreamWriter是爲實現這種轉換而設計的。
InputStreamReader構造方法如下:
- InputStreamReader(InputStream in):將字節流in轉換爲字符流對象,字符流使用默認字符集。
- InputStreamReader(InputStream in, String charsetName):將字節流in轉換爲字符流對象, charsetName指定字符流的字符集,字符集主要有:US-ASCII、ISO-8859-1、UTF-8和UTF-16。 如果指定的字符集不支持會拋出UnsupportedEncodingException異常。
OutputStreamWriter構造方法如下:
- OutputStreamWriter(OutputStream out):將字節流out轉換爲字符流對象,字符流使用默認字符集。
- OutputStreamWriter(OutputStream out,String charsetName):將字節流out轉換爲字符流對象, charsetName指定字符流的字符集,如果指定的字符集不支持會拋出 UnsupportedEncodingException異常。
文件複製的案例改造成緩衝流實現,代碼如下:
import java.io.*;
public class FileCopyWithBuffer {
public static void main(String[] args) {
// 創建字節文件輸入流對象
try(FileInputStream fis = new FileInputStream("/Users/caizhengjie/Desktop/qq/123.txt");
// 創建轉換流對象
InputStreamReader isr = new InputStreamReader(fis);
// 創建字符緩衝流
BufferedReader bis = new BufferedReader(isr);
// 創建字節文件輸出流對象
FileOutputStream fos = new FileOutputStream("/Users/caizhengjie/Desktop/qq/asd/1234.txt");
// 創建轉換流對象
OutputStreamWriter osw = new OutputStreamWriter(fos);
// 創建字符緩衝輸出流對象
BufferedWriter bos = new BufferedWriter(osw);
){
// 首先讀取一行文本
String line = bis.readLine();
while (line!=null){
// 開始寫入數據
bos.write(line);
// 寫一個換行符
bos.newLine();
// 再讀取一行文本
line = bis.readLine();
}
System.out.println("複製完成");
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
上述流從一個 文件字節流,構建轉換流,再構建緩衝流,這個過程比較麻煩,在I/O流開發過程中經常遇到這種流 的“鏈條”。
以上內容僅供參考學習,如有侵權請聯繫我刪除!
如果這篇文章對您有幫助,左下角的大拇指就是對博主最大的鼓勵。
您的鼓勵就是博主最大的動力!