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();
  }
}
測試測試

results matching ""

    No results matching ""