編碼:字符串變成字節數組。數組
解碼:字節數組變成字符串dom
String --> byte[]; str.getBytes();函數
byte --> String: new String(bytep[]);測試
若是編碼的時候產生錯誤,就放棄編碼
若是解碼的時候產生錯誤,就編一次,解一次(通用方法)[對編碼的時候用gbk,解碼的線程
時候用utf-8,這種方法不行,由於utf-8會去找類似的字,結果源碼就會變掉]指針
在記事本里輸入聯通兩個字,就會變成亂碼,由於這兩個字符合聯通的編碼形式code
符合UTF-8的編碼規則對象
沒有方法的接口稱之爲標記接口繼承
FileOutputStream out;
out.write(256) 只是輸出最低8位
打開記事本實際上是解碼的過程
objectInputStream與ObjectOutputStream
被操做的對象須要實現Serizlizable(標記接口); static final long serialVersionUID = 42L;
Serizlizable接口的標籤
將堆內存中的對象轉化爲硬盤上的
因此靜態的不能序列化(也稱爲持久化存儲),,在方法區
加關鍵字transient 也不能序列化
管道流:
PipedInputStream 和PipedOutputStream
輸入輸出能夠直接進行鏈接,經過結合線程使用
RandomAccessFile
隨機訪問文件,自身具有讀寫的方法。
經過skipBytes(int x),seek (int x) 來達到隨機訪問
該類不是IO體系中的子類。
而是直接繼承來自Object
可是它是IO包中成員,由於它具有讀和寫功能。
內部封裝了一個數組,並且經過指針對數組元素進行操做
能夠經過getFilePointer獲取指針信息
同時能夠經過seek改變指針的位置
其實文成讀寫的原理就是內部封裝了字節輸入流和輸出流
經過構造函數能夠看出,該類只能操做文件
若是模式爲只讀r,不會建立文件,會去讀取一個已存在文件,若是該文件不存在
則會出現異常。
若是模式爲rw,操做的文件不存在會自動建立,存在會建立,存在則不會覆蓋
經過seek方法,調整對象中指針,a.write(int) 輸出的是參數的最低8位,
能夠用於操做基本數據類型的流對象
DataInputStream與DataOutputStream 若是以writeUTF只能以對應的方法來讀取。不能用轉換流,writeUTF用的UTF-8修改版
若是是字節流,存入到記事本里,系統會選擇編碼表來查,因此都是亂碼。
操做基本數據類型
DataInputStream與DataOutputStream
操做字節數組
ByteArrayInpuStream 與
ByteArrayOutputStream
操做字符數組
CharArrayReader與CharArrayWrite
操做字符串
StringReader與StringWriter
ByteArrayInputStream: 在構造的時候,須要接收數據源,並且數據源是一個字節數組
ByteArrayOutputStream: 在構造的時候,不用定義數據目的,由於該對象中已經內部封裝了可變長度的本身數組,這就是數據目的地。
由於這兩個流對象都操做數組,並無使用系統資源,因此,不用進行close關閉。
源設備:
鍵盤 System.in 硬盤 FileStream 內存 ArrayStream
目的設備:
控制檯 System.out 硬盤 FileStream 內存 ArrayStream
用流的思想來操做數組
計算機只能識別二進制數據,早起又來是電信號
爲了方便應用計算機,讓它能夠識別各個國家的文字,就將各個國家的文字用數字來表示
並一一對應,造成一張表
這就是編碼表
ASCII: 美國標準信息交換碼 用一個字節的7位可表示
ISO8859-1 : 拉丁碼錶,歐洲碼錶, 用一個字節的8位表示
GB2312: 中國的中文碼錶
GBK: 中國的中文編碼表升級,融合了更多的中文文字字符號
Unicode: 國標標準碼,融合了多種文字;
UTF-8: 最多用三個字節來表示一個字符
中間其實走過Unicode ,用你好來測試