java io總結

JAVA IO

字節與字符區別

  • 1字節是1Byte = 8bit
  • 1字符表示語義環境中的一個字符,根據編碼方式的不同,可能佔據1字節(ASC), 2字節(UTF-16)或多個字節

編碼

  • ASC碼:單字節碼錶,含英文字母、數字、一些常見控制字符等128個字符
  • unicode:所有語言的通用碼錶,unicode常規字符集佔用2 byte
    • UTF-16: java默認,字符表示與unicode一致。
    • UTF-8: 可變長碼錶。
      • 原因: ASCII字符用unicode方式表示浪費空間
      • 編碼規則:

java io

  • java io流可分爲字節流與字符流兩大類
    • 字節流InputStream, OutputStream
    • 字符流Reader, Writer
      實際總線中流動的是字節流,因此需要使用字節流與文件、網絡socket等通信
      InputStreamReader, OutputStreamWriter是字節與字符之間轉換的橋樑,在創建InputStreamReader, OutputStreamWriter時指定編碼方式
      io操作如果不指定編碼方式,將採用操作系統默認的編碼,因此在進行io操作時,最好指定編碼方式

java io類層次(補圖)

java操作io demo

  • 字節流操作(補代碼)
private void inOutputStream() {
    int[] i = {128, 250, 430, 520, 820};
    String file = "d:/inOutputStream.txt";

    try (DataOutputStream dos = new DataOutputStream(new FileOutputStream(file));
         DataInputStream dis = new DataInputStream(new FileInputStream(file))) {

        for (int j : i) {
            // write int to data output stream
            dos.writeInt(j);
        }

        // force data to the underlying file output stream
        dos.flush();

        // available stream to be read
        while (dis.available() > 0) {
            // read four bytes from data input, return int
            int k = dis.readInt();

            System.out.print(k + " ");   // 128 250 430 520 820
        }
    } catch (Exception e) {
        // if any error occurs
        e.printStackTrace();
    }
}
  • 涉及編碼的字符流操作(補代碼)
private void inOutputReader() {
    String file = "d:/inOutputReader.txt";

    try (BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file),
            "UTF-8"));
         BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF-8"))) {

        bufferedWriter.append("中文");
        bufferedWriter.append("chinese");
        bufferedWriter.flush();


        // available stream to be read
        while (br.ready()) {
            System.out.print((char)br.read());      // 中文chinese
        }
    } catch (Exception e) {
        // if any error occurs
        e.printStackTrace();
    }
}

java io設計模式

- 裝飾器模式

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章