IO流 總結三

編碼:字符串變成字節數組。數組

解碼:字節數組變成字符串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 ,用你好來測試

相關文章
相關標籤/搜索