JAVA IO操作總結:節點流和處理流


JAVA IO操作總結——節點流和處理流   按照流是否直接與特定的地方(如磁盤、內存、設備等)相連,分爲節點流和處理流兩類。


  節點流:可以從或向一個特定的地方(節點)讀寫數據。如FileReader

  處理流:是對一個已存在的流的連接和封裝,通過所封裝的流的功能調用實現數據讀寫。如BufferedReader。處理流的構造方法總是要帶一個其他的流對象做參數。一個流對象經過其他流的多次包裝,稱爲流的鏈接。

  常用的節點流

  父 類 InputStream OutputStream Reader Writer

  文 件 *FileInputStream FileOutputStrean FileReader FileWriter 文件進行處理的節點流

       數 組 *ByteArrayInputStream ByteArrayOutputStream CharArrayReader CharArrayWriter 對數組進行處理的節點流(對應的不再是文件,而是內存中的一個數組)

      字符串 *無  無 StringReader StringWriter 對字符串進行處理的節點流

  管 道 *PipedInputStream PipedOutputStream PipedReader PipedWriter 對管道進行處理的節點流

  常用處理流(關閉處理流使用關閉裏面的節點流)

  父 類 InputStream OutputStream Reader Writer

  緩衝流 *BufferedImputStrean BufferedOutputStream BufferedReader BufferedWriter ----需要父類作爲參數構造,增加緩衝功能,避免頻繁讀寫硬盤,可以初始化緩衝數據的大小,由於帶了緩衝功能,所以就寫數據的時候需要使用flush方法咯

  轉換流 *InputStreamReader OutputStreamWriter- 要inputStream或OutputStream作爲參數,實現從字節流到字符流的轉換

  數據流 *DataInputStream DataOutputStream -提供將基礎數據類型寫入到文件中,或者讀取出來,爲什麼要有這個流呢?看這樣的分析,如果沒有這種流的話,有一個long,本身只佔8個字節,如果我要寫入到文件,需要轉成字符串,然後在轉成字符數組,那空間會佔用很多,但是有了這種流之後就很方便了,直接將這8個字節寫到文件就完了。。是不是既節約了內存空間有讓程序寫起來更加方便簡單了吶。寫倒是很簡單,但是讀取的時候就注意了,根據讀取的數據類型,指針會往下移,所以你寫的順序必須要和讀的順序一致才能完成你正確的需求。

  *ObjectInputStream ObjectOutputStream

  *順便研究序列化---將對象所在的類型全部轉換成二進制,然後寫入到介質中去

  *transient關鍵字--修飾成員變量,不寫入該成員變量

  *Serializable接口--表示接口,怎樣實現的呢,在序列化之前,首先判斷 (對象 instanceof Serializable)如果返回true則執行序列化,否者拋出異常,並且裏面有一個ID,是用來快速查找某個對象的時候使用的

  *Externalizable接口--外部化接口;他是Serializable接口的子接口,能手動控制序列化的方式

  爲什麼要用writeUTF()--因爲這種方式是按照utf-8來寫入的,而默認方式是utf-16只是節省空間而已

  --字節流讀取中文的問題

  *由於java使用的是unicode編碼,每一箇中文字符是佔用兩個字節的,所以沒有隻讀出其中一個字節並使用的話當然是亂碼咯,雖然普通的英文字符也是兩個字節的,但是讀取的時候將高8位去掉也能回去正確的英文字符,所以沒有問題,所以最好還是使用字符流的方式讀取好點

  --java.io中專門提供用於打印的流(這類流在寫入的時候有自動flush的功能,所以你不需要每打印一個東西都flush一次)--------注意他們也是屬於處理流,只不過這裏單獨列出來分析而已

  *PrintStream--繼承自-->FilterOutputStream--繼承自-->OutputStream,(它的構造函數需要OutputStream對象)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章