對於PrintStream 和PrintWriter的理解 以及各種編碼格式 以及編碼和解碼的解釋
PrintStream:
是一個位元組列印流,System.out對應的型別就是PrintStream。
它的建構函式函式可以接收三種資料型別的值。
1,字串路徑。
2,File物件。
3,OutputStream。
PrintWriter:
是一個字元列印流。建構函式可以接收四種類型的值。
1,字串路徑。
2,File物件。
對於1,2型別的資料,還可以指定編碼表。也就是字符集。
運算元組的流物件
1、操作位元組陣列
-
-
ByteArrayInputStream
-
ByteArrayOutputStream
-
toByteArray();
toString();
writeTo(OutputStream);
2、操作字元陣列。
-
-
CharArrayReader
-
CharArrayWriter
-
3、操作字串
-
-
StringReader,
-
StringWriter。
-
對於這些流,源是記憶體。目的也是記憶體。
而且這些流並未呼叫系統資源。使用的就是記憶體中的陣列。
所以這些在使用的時候不需要close。
運算元組的讀取流在構造是,必須要明確一個數據源。所以要傳入相對應的陣列。
對於運算元組的寫入流,在建構函式可以使用空引數。因為它內建了一個可變長度陣列作為緩衝區。
這幾個流的出現其實就是通過流的讀寫思想在運算元組。
複合型別資料(比如:姓名、年齡、籍貫、性別等等)
編碼轉換
在io中涉及到編碼轉換的流是轉換流和列印流。
但是列印流只有輸出。
在轉換流中是可以指定編碼表的。
預設情況下,都是本機預設的碼錶GBK. 這個編碼表怎麼來的?
System.out.println(System.getProperty("file.encoding"));
常見碼錶:
ascii:美國標準資訊交換碼。使用的是1個位元組的7位來表示該表中的字元。
ISO8859-1:拉丁碼錶。使用1個位元組來表示。
GB2312:簡體中文碼錶。
GBK:簡體中文碼錶,比GB2312融入更多的中文檔案和符號。
unicode:國際標準碼錶。都用兩個位元組表示一個字元。
UTF-8:對unicode進行優化,每一個位元組都加入了標識頭。
編碼轉換:
字串 -->位元組陣列 :編碼。通過getBytes(charset);
位元組陣列-->字串: 解碼。通過String類的建構函式完成。String(byte[],charset);