1. 程式人生 > >API-物件流,字元流,子類中轉換流,緩衝流,檔案字元流

API-物件流,字元流,子類中轉換流,緩衝流,檔案字元流

物件流:
    有的時候,我們可能需要將記憶體中的物件持久化到硬碟上,或者將
    硬碟中的物件資訊讀到記憶體中,這個時候我們需要使用物件輸入
    輸出流。
    
     序列化: 是物件轉換成一個位元組序列的過程,是一個寫操作
  反序列化:   一個位元組序列轉換成物件的過程 ,是一個讀操作
  
ObjectOutputStream
          構造器:
          
     ObjectOutputStream(OutputStream out) 
          建立一個指定位元組輸出流的物件輸出流物件。
          
          常用方法: 除了提供了一些基本資料型別的寫方法外,還提供了
     void writeObject(Object obj)
                將記憶體中的物件持久化到硬碟上 
                    
ObjectIntputStream 
     ObjectIntputStream(OutputStream out) 
          建立一個指定位元組輸入流的物件輸入流物件。
          
          常用方法: 除了提供了一些基本資料型別的讀方法外,還提供了
     Object readObject();
               從硬碟上讀取一個位元組序列,轉換成物件
               
Serializable:序列化介面
          如果想將物件序列化,那麼物件的型別必須實現此介面。此介面
          內什麼都沒有,只是一個序列化標識。

serialVersionUID:
      每個能序列化的物件,在被序列化時,系統會預設給此物件的類計算一個
      序列化版本號。不同的平臺預設提供的序列化版本號多數情況下不會相同。
      因此當我們反序列時,如果硬盤裡儲存的物件的版本號與當前設計的型別
      的版本號不一致。會出現執行時異常:
   java.io.InvalidClassException,這種情況叫不相容問題。
   
      如果我們想解決不相容問題。我們應該手動提供版本號。儘可能的相同
      這樣來解決不相容問題
      
      另外一種情況:
          序列化過後,可能會修改型別,如果使用系統預設提供的
          版本號,在反序列時,會有異常,如果手動提供,不出現異常
         多出來的成員變數,以預設值的形式,賦值給反序列化回來的物件。
transient:成員變數的一個修飾詞,可以理解為瘦身。
     有的時候,在序列化物件時,我們不需要將物件的某些成員變數
     值持久化到硬碟上(因為不重要),此時,我們可以在這些成員變數
     前新增修飾詞transient(儲存時,進行減肥)
================================================
字元流:
     在輸出輸入操作時,以字元為單位進行操作,預設是unicode編碼集
      字元流的抽象父類分別是
   Writer/Reader
   Writer提供了字元輸出流的常用方法
        void close():關閉 
        void write(char[] cbuf):寫一個字元陣列
        void write(char[] cbuf, int off, int len)
                   寫一個字元陣列的一部分 
        write(int c):寫一個字元
        write(String str):寫一串字元
        write(String str, int off, int len) 
                寫字串的一部分 
   Reader提供了字元輸入流的常用方法
        int read():讀一個字元,儲存到int的低16位
        int read(char[] cbuf):將資料讀進字元陣列中,返回的是讀取的有效字元個數
        int read(char[] cbuf, int off, int len) 
                  將字元讀入陣列的一部分。
============================================
子類中轉換流:
    OutputStreamWriter:
              將字元轉換成位元組寫出到硬碟上
        構造器:          
    OutputStreamWriter(OutputStream out)
       建立一個指定位元組輸出流的字元輸出流物件,採用的是系統預設的編碼集 
    OutputStreamWriter(OutputStream out, Charset cs) 
    OutputStreamWriter(OutputStream out, CharsetEncoder enc) 
    OutputStreamWriter(OutputStream out, String charsetName)
        建立一個指定位元組輸出流的字元輸出流物件,採用指定編碼集。 
    
     write(int a);
            當a的低16位,如果被設計成相應的字元時,如果兩個位元組都是
            有效位元組,會寫出兩個。如果低16位對應是無效字元,或是有效
            位元組只有一位時,會寫一個位元組。      
    
    
    
      
    
    InputStreamReader()
             將位元組轉換成字元讀程序序中
    構造器:
    InputStreamReader(InputStream in) 
        建立一個使用預設字符集的InputStreamReader。  
    InputStreamReader(InputStream in, Charset cs) 
    InputStreamReader(InputStream in, CharsetDecoder dec) 
    InputStreamReader(InputStream in, String charsetName) 
    建立一個使用指定字符集的InputStreamReader。  
====================================================
緩衝流:

PrintWriter:提供了豐富的方法,比BufferedWriter更加常用,此型別提供了
             行自動重新整理的功能
        構造器:       
       PrintWriter(File file) 
       PrintWriter(OutputStream out)
       PrintWriter(OutputStream out, boolean autoFlush)        
       PrintWriter(String fileName) 
       PrintWriter(Writer out) 
       PrintWriter(Writer out, boolean autoFlush) 
       
       上述構造器,有第二個引數的,可以設定為true,表示行自動重新整理。  
       只有一個引數的構造器,相當有兩個引數時,設定為false的情況,即取消了
       行自動重新整理的功能
       
     常用方法:
        println() 
                通過寫入行分隔符字串來終止當前行。 
        println(boolean x) 
        列印一個布林值,然後終止該行。  
        void println(char x) 
        列印一個字元,然後終止該行。  
        void println(char[] x) 
        列印字元陣列,然後終止行。  
        void println(double x) 
        列印雙精度浮點數,然後終止行。  
        void println(float x) 
        列印一個浮點數,然後終止該行。  
        void println(int x) 
        列印一個整數,然後終止該行。  
        void println(long x) 
        列印一個長整型,然後終止行。  
        void println(Object x) 
        列印一個物件,然後終止該行。  
        void println(String x)  
     
BufferedReader:提供了一個緩衝區
       
        構造器:   
      BufferedReader(Reader in) 
            建立使用預設大小的輸入緩衝區的緩衝字元輸入流。  
      BufferedReader(Reader in, int sz) 
            建立使用指定大小的輸入緩衝區的緩衝字元輸入流。
        常用方法:  
      String readLine():
                讀一行字串,讀至換行符號為止,返回的資料不包含換行符
                當返回值為null時,表示讀至檔案末尾
=====================================
檔案字元流:
   FileWriter/FileReader
   
   FileWriter:相當於OutputStreamWriter與
                  FileOutputStream合起來的功能,內部也維護
                    了一個緩衝區,但是需要手動flush
   構造器:
           FileWriter(File file)
           FileWriter(File file, boolean append) 
           FileWriter(String fileName) 
           FileWriter(String fileName, boolean append)
           
           append:表示追加,但是此流不能設定字符集。
           常用方法與 OutputStreamWriter的差不多
           
   FileReader:相當於InputStreamReader和FileInputStream合起來的功能
                內部也維護了一個緩衝區
   構造器:
      FileReader(File file) 
      FileReader(String fileName) 
   常用方法與InputStreamReader的方法差不多
=============================================
System是一個final修飾的型別
        兩個成員變數
        out:是PrintStream型別,預設的輸出目的地是控制檯console
        in:  是InputStream型別, 預設的資料來源是鍵盤