歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> JAVA IO操作總結——節點流和處理流

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

日期:2017/3/1 10:55:49   编辑:Linux編程

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對象)

* 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目標文件裡面去

Copyright © Linux教程網 All Rights Reserved