熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

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

2013-11-23 19:09:16  來源: Java核心技術 

  按照流是否直接與特定的地方(如磁盤內存設備等)相連分為節點流和處理流兩類

  節點流可以從或向一個特定的地方(節點)讀寫數據如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本身只占個字節如果我要寫入到文件需要轉成字符串然後在轉成字符數組那空間會占用很多但是有了這種流之後就很方便了直接將這個字節寫到文件就完了是不是既節約了內存空間有讓程序寫起來更加方便簡單了吶寫倒是很簡單但是讀取的時候就注意了根據讀取的數據類型指針會往下移所以你寫的順序必須要和讀的順序一致才能完成你正確的需求

  *ObjectInputStream          ObjectOutputStream

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

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

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

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

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

  字節流讀取中文的問題

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

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

  *PrintStream繼承自>FilterOutputStream繼承自>OutputStream(它的構造函數需要OutputStream對象)

  *PrintWriter繼承自>Writer(它的構造函數需要Writer對象)

  SystemIn====InputStream

  SystemOut===PrintStream

  這種流的print方法不會拋出異常這是JSP技術中常用的流如果在JSP頁面的打印會拋出異常的話那JSP也太難寫了點!注意理解這樣的設計思路

  看這樣的代碼

  PrintStream ps=new PrintStream(new OutputStream(c://));

  SystemsetOut(ps);

  SystemOutprintln(jfdajsflkajdf);//這樣將不會在打印到命令行窗口而是指定的PrintStream目標文件裡面去


From:http://tw.wingwit.com/Article/program/Java/hx/201311/26364.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.