天天看點

java I/O流

java I/O流

    File對象是檔案和檔案目錄路徑的抽象表示形式,與平台無關,它能建立、删除、重命名檔案和目錄,但 File 不能通路檔案内容本身,通路檔案本身需要流(Steam,Reader...)來執行

    這個答案是不确定的,File建立出來的對象可以不存在,也可以存在,但如果要用File對象來表示一個真實存在的檔案或者檔案夾,就必須保證檔案存在!

了解了File之後,我們走向流

    I/O是Input/Output的縮寫, I/O技術是非常實用的技術, 用于處理裝置之間的資料傳輸。 如讀/寫檔案,網絡通訊等

    首先,這兩個概念都是針對程式來說的,将資料讀到程式類=輸入(input),将資料從程式寫到檔案或資料庫=輸出(output)

    按操作資料機關分: 位元組流(8 bit),字元流(16 bit)

    按資料流的流向分: 輸入流,輸出流

    按流的角色分: 節點流,處理流

(抽象基類)

位元組流

字元流

輸入流

InputStream

Reader

輸出流

OutputStream

Writer

助記:人類閱讀(read)看到的是文字、字元等等,是以字元流就是:Reader和Writer,是以剩下的那個就是位元組流

java I/O流

    InputStream 和 Reader 是所有輸入流的基類

OutputStream & Writer

寫入:

1.建立一個流對象,将已存在的一個檔案加載進流。

2.建立一個臨時存放資料的數組。

3.調用流對象的讀取方法将流中的資料讀入到數組中。

4.關閉資源。

輸出:

1.建立流對象,建立資料存放檔案

2.調用流對象的寫入方法,将資料寫入流

3.調用flush()清除緩存

4.關閉流資源,并将流中的資料清空到檔案中。

讀取

輸出

    因為緩沖流的讀寫速度更快

InputStreamReader:将InputStream轉換為Reader

OutputStreamWriter:将Writer轉換為OutputStream

InputStreamReader的構造方法:

OutputStreamWriter的構造方法:

    能傳輸java對象的一種流

    用于存儲和讀取基本資料類型資料或對象的處理流。它的強大之處就是可以把Java中的對象寫入到資料源中(序列化),也能把對象從資料源中還原回來。(反序列化)

    ObjectInputStream(反序列化)和OjbectOutputSteam(序列化)

    序列化: 用ObjectOutputStream類儲存基本類型資料或對象的機制

    反序列化: 用ObjectInputStream類讀取基本類型資料或對象的機制

    對象序列化機制允許把記憶體中的Java對象轉換成平台無關的二進制流,進而允許把這種二進制流持久地儲存在磁盤上,或通過網絡将這種二進制流傳輸到另一個網絡節點。當其它程式擷取了這種二進制流,就可以恢複成原來的Java對象

1.自定義的類需要實作Serializable接口(相當于傳輸辨別),方可序列化;

2.自定義類的屬性都需要可序列化,比如自定義的屬性也需要實作Serializable接口;

3.實作了Serializable接口的類都需要有一個辨別序列化版本辨別符的靜态常量:

private static final long serialVersionUID;(可以随便給,如果不給,當該類被修改後,就無法還原)

4.注意事項:ObjectOutputStream和ObjectInputStream不能序列化static和transient修飾的成員變量

首先建好要傳輸的實體對象

編寫序列化類

反序列化類

運作結果:

java I/O流

稍作改動Person類:

再次運作,結果如下:

java I/O流

到此結束