InputStreamReader與OutputStreamWriter
Prerequisites:
轉換串流
InputStream與OutputStream是處理位元組資料的串流。
Reader與Writer抽象父類別,是處理字元資料的串流。
InputStream + Reader 位元組串流,可以變成讀取字元資料串流。
OutputStream + Writer 位元組串流,可以變成寫入字元資料串流。
InputStreamReader與OutputStreamWriter,建構子參數是InputStream與OutputStream。
意思是可以透過InputStreamReader與OutputStreamWriter,把「位元組」串流轉換成「字元」串流,還可以設定編碼。
可以處理亂碼的串流。
InputStreamReader建構子
第2個參數設定編碼,若沒設定第2個參數,預設是用java vm 設定的編碼。
InputStreamReader(InputStream in)
InputStreamReader(InputStream in, String charsetName)
OutputStreamWriter建構子
第2個參數設定編碼,若沒設定第2個參數,預設是用java vm 設定的編碼。
OutputStreamWriter(OutputStream out)
OutputStreamWriter(OutputStream out, Charset cs)
InputStreamReader與FileInputStream
我有一個編碼為big5的文件,我嘗試讀取它。
Mac可以使用文字編輯textedit,設定編碼。
1
2
3
4
5
6
7
8
9
public class Test {
public static void main(String[] args) throws IOException {
BufferedReader reader =
new BufferedReader(new InputStreamReader(new FileInputStream("/Users/cici/testc/401"), "big5"));
String line = reader.readLine();
System.out.println(line);
reader.close();
}
}
你好台灣
OutputStreamWriter與FileOutputStream
1
2
3
OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream("/Users/cici/testc/401"), "big5");
writer.write("測試測試");
writer.close();
InputStreamReader與ByteArray串流
除了檔案編碼,在Socket串流中,常常使用記憶體緩衝區串流(ByteArrayInputStream)與轉換串流的應用。
1
2
3
4
5
6
7
8
9
10
public class Test4 {
public static void main(String[] args) throws IOException {
ByteArrayInputStream byteArrInput = new ByteArrayInputStream("測試測試".getBytes());
BufferedReader reader =
new BufferedReader(new InputStreamReader(byteArrInput));
String line = reader.readLine();
System.out.println(line);
reader.close();
}
}
測試測試