使用java實現物件導向-File I/O

來源:互聯網
上載者:User

標籤:問題   官方   檔案中   整數   dwr   說明   class   否則   edr   

java.io.File類用於表示檔案(目錄)

File類只用於表示檔案(目錄)的資訊(名稱、大小等),不能用於檔案內容的訪問

 

RandomAccessFile java提供的對檔案內容的訪問,既可以讀檔案,也可以寫檔案。

RandomAccessFile支援隨機訪問檔案,可以訪問檔案的任意位置

 

1.java檔案模型

  在硬碟上的檔案是byte byte byte儲存的,是資料的集合

2.開啟檔案

  有兩種模式"rw"(讀寫)  "r"(唯讀)

  RandomAccessFile raf = new RandomeAccessFile(file,"rw")

  檔案指標,開啟檔案時指標在開頭 pointer = 0;

3. 寫方法

    raf.write(int)--->唯寫一個位元組(後8位),同時指標指向下一個位置,準備再次寫入

4.讀方法

   int b = raf.read()--->讀一個位元組

5.檔案讀寫完成以後一定要關閉(Oracle官方說明)

 

 

一、序列化與基本類型序列化

1)將類型int 轉換成4byte或將其他資料類型轉換成byte的過程叫序列化

     資料---->n byte

2)還原序列化

    將n個byte 轉換成一個資料的過程

    nbyte ---> 資料

3)RandomAccessFile提供基本類型的讀寫方法,可以將基本類型資料

   序列化到檔案或者將檔案內容還原序列化為資料

IO流(輸入資料流、輸出資料流)

位元組流、字元流

1.位元組流

1)InputStream、OutputStream

    InputStream抽象了應用程式讀取資料的方式

    OutputStream抽象了應用程式寫出資料的方式

2)EOF = End   讀到-1就讀到結尾

3)輸入資料流基本方法

   int  b = in.read();讀取一個位元組無符號填充到int低八位.-1是 EOF

   in.read(byte[] buf)

   in.read(byte[] buf,int start,int size)

4)輸出資料流基本方法

  out.write(int b)  寫出一個byte到流,b的低8位

  out.write(byte[] buf)將buf位元組數組都寫入到流

  out.write(byte[] buf,int start,int size)

 

5)FileInputStream--->具體實現了在檔案上讀取資料

6)FileOutputStream 實現了向檔案中寫出byte資料的方法    

  

二、字元流

1) 編碼問題

2)認識文本和文字檔

java的文本(char)是16位不帶正負號的整數,是字元的unicode編碼(雙位元組編碼)

檔案是byte byte byte ...的資料序列

文字檔是文本(char)序列按照某種編碼方案(utf-8,utf-16be,gbk)序列化為byte的儲存結果

3)字元流(Reader Writer)---->操作的是文本文字檔

字元的處理,一次處理一個字元

字元的底層任然是基本的位元組序列

字元流的基本實現

   InputStreamReader   完成byte流解析為char流,按照編碼解析

   OutputStreamWriter  提供char流到byte流,按照編碼處理 

  

   FileReader/FileWriter

字元流的過濾器

   BufferedReader   ---->readLine 一次讀一行

   BufferedWriter/PrintWriter   ---->寫一行   

  

  

三、對象的序列化,還原序列化

1)對象序列化,就是將Object轉換成byte序列,反之叫對象的還原序列化

2)序列化流(ObjectOutputStream),是過濾流----writeObject

   還原序列化流(ObjectInputStream)---readObject

 

3)序列化介面(Serializable)

   對象必須實現序列化介面 ,才能進行序列化,否則將出現異常

   這個介面,沒有任何方法,只是一個標準

 

4) transient關鍵字

    private void writeObject(java.io.ObjectOutputStream s)

        throws java.io.IOException

private void readObject(java.io.ObjectInputStream s)

        throws java.io.IOException, ClassNotFoundException

       

   分析ArrayList源碼中序列化和還原序列化的問題

 

5)序列化中 子類和父類建構函式的調用問題

對子類對象進行還原序列化操作是,如果有父類沒有實現序列化介面,那麼其父類的建構函式會被調用。

使用java實現物件導向-File I/O

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.