方便的IO操作是每個成功的語言所必須具有的,但是要有好的IO庫可不是件容易的事情,因為不僅有三種不同的種類的IO需要考慮(檔案、控制台、網路連接),而且需要通過大量不同的方式與它們通訊(順序、隨機訪問、二進位、字元、按行、按字等等)。
序列化就是一種用來處理物件流程的機制,所謂物件流程也就是將對象的內容進行流化。可以對流化後的對象進行讀寫操作,也可將流化後的對象傳輸於網路之間。對象序列化的最主要的用處就是在傳遞和儲存對象(object)的時候,保證對象的完整性和可傳遞性。
Java庫的IO類分割為輸入與輸出兩個部分,通過繼承,從InputStream(輸入資料流)衍生的所有類都擁有名為read()的基本方法,用於讀取單個位元組或者位元組數組。類似地,從OutputStream衍生的所有類都擁有基本方法write(),用於寫入單個位元組或者位元組數組。然而,我們通常不會用到這些方法;它們之所以存在,是因為更複雜的類可以利用它們,以便提供一個更有用的介面。很有必要按照功能對類進行分類。庫的設計者首先決定與輸入有關的所有類都從InputStream繼承,而與輸出有關的所有類都從OutputStream繼承。
1,InputStream 的類型
(1) ByteArrayInputStream (位元組數組)。允許記憶體中的一個緩衝區作為InputStream使用。從中提取位元組的緩衝區/作為一個資料來源使用。通過將其同一個FilterInputStream對象串連,可提供一個有用的介面。
(2) StringBufferInputStream (String對象)。將一個String轉換成InputStream 一個String(字串)。基礎的實施方案實際採用一個StringBuffer(字串緩衝)/作為一個資料來源使用。通過將其同一個FilterInputStream對象串連,可提供一個有用的介面。
(3) 檔案。FileInputStream 用於從檔案讀取資訊。代表檔案名稱的一個String,或者一個File或FileDescriptor對象/作為一個資料來源使用。通過將其同一個FilterInputStream對象串連,可提供一個有用的介面。
2,OutputStream的類型
(1).ByteArrayOutputStream 在記憶體中建立一個緩衝區。我們發送給流的所有資料都會置入這個緩衝區。可選緩衝區的初始大小/用於指出資料的目的地。若將其同FilterOutputStream對象串連到一起,可提供一個有用的介面。
(2).FileOutputStream 將資訊發給一個檔案,用一個String代表檔案名稱,或選用一個File或FileDescriptor對象/用於指出資料的目的地。若將其同FilterOutputStream對象串連到一起,可提供一個有用的介面。
3,FilterInputStream類型
(1).DataInputStream,與DataOutputStream搭配使用,可以按照可移植方式從流讀取基礎資料型別 (Elementary Data Type),其建構函式參數為InputStream;
(2).BufferedInputstream,可以防止每次讀取是都得進行實際的寫操作,代表"使用緩衝區",建構函式參數仍為InputStream;
4,FilterOutputStream類型
(1).DataOutputStream.....
(2).PrintStream,用於產生格式化輸出,其中DataOutputStream處理資料的儲存,PrintStream處理顯示,建構函式參數為OutputStream;
(3).BufferedOutputStream.....
5,Reader和Writer(提供相容Unicode與面向字元的IO功能)
(1).為了關聯"位元組"階層和"字元"階層需要適配器。InputStreamReader 可以把 InputStream 轉換為Reader,
OutputStreamReader 可以把OutputStream 轉換為 Writer
(2).FileInputStream 對應 FileReader;FileOutputStream 對應 FileWriter;StringBufferInputStream 對應StringReader;
(3).FilterInputStream 對應 FilterReader,FilterOutputStream 對應 FilterWriter,BufferedInputStream 對應 BufferedReader,BufferedOutputStream 對應 BufferedWriter,PrintStream 對應 PrintWriter,StreamTokenizer 對應 StreamTokenizer
6,操作Java的IO的一般步驟:
(1).首先建立資料來源IO,
(2).然後根據需要建立需要封裝的IO類,其建構函式參數為已建立的資料來源IO;
(3).操作得到的IO控制代碼;
樣本程式:我們以建立一個具有緩衝的檔案輸入資料流為例,假定需要從磁碟讀取檔案“E://Java/data.txt”:
// 建立一個FileInputStream:
FileInputStream fileInput = new FileInputStream(“E://Java/data.txt”);
// 建立一個BufferedInputStream:
BufferedInputStream bufferedInput = new BufferedInputStream(fileInput);
// 現在得到的bufferedInput即是具有緩衝的檔案輸入資料流,或者進一步簡寫如下:
BufferedInputStream input = new BufferedInputStream(new FileInputStream(“E://Java/data.txt”));
// 現在得到的input即是具有緩衝的檔案輸入資料流
參考原文:http://blog.csdn.net/Cpp_Java_Man/archive/2006/05/02/705271.aspx