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) {
dos.writeInt(j);
}
dos.flush();
while (dis.available() > 0) {
int k = dis.readInt();
System.out.print(k + " ");
}
} catch (Exception e) {
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();
while (br.ready()) {
System.out.print((char)br.read());
}
} catch (Exception e) {
e.printStackTrace();
}
}
java io設計模式
- 裝飾器模式