程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> JAVA IO操作總結——節點流和處理流

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

編輯:關於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,本身只占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對象)

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

  System.In====InputStream

  System.Out===PrintStream

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

  --看這樣的代碼

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

  System.setOut(ps);

  System.Out.println("jfdaJSflkajdf");//這樣將不會在打印到命令行窗口,而是指定的PrintStream目標文件裡面去。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved