知識點一: 四大等級結構
java語言的i/o庫提供了四大等級結構:InputStreamOutputStreamReaderWriter四個系列的類InputStream和OutputStream處理位字節流數據 Reader和Writer處理位的字符流數據InputStream和Reader處理輸入 OutputStream和Writer處理輸出大家一定要到JSE文檔中看看這四大等級結構的類繼承體系
除了這四大系列類i/o庫還提供了少數的輔助類其中比較重要的是InputStreamReader和OutputStreamWriterInputStreamReader把InputStream適配為Reader OutputStreamWriter把OutputStream適配為Writer;這樣就架起了字節流處理類和字符流處理類間的橋梁
您使用i/o庫時只要按以上的規則到相應的類體系中尋找您需要的類即可
知識點二: 適配功能
java i/o庫中的繼承不是普通的繼承;它的繼承模式分為兩種其一就是Adapter模式(具體分析請參見<<java與模式>>一書) 下面以InputStream類體系為例進行說明
InputStream有個直接子類:ByteArrayInputStreamFileInputStreamPipedInputStreamStringBufferInputStreamFilterInputStreamObjectInputStream和SequenceInputStream前四個采用了Adapter模式如FileInputStream部分代碼如下:
Public class FileInputStream extends InputStream
{
/* File Descriptor handle to the open file */
private FileDescriptor fd;
public FileInputStream(FileDescriptor fdObj)
{
SecurityManager security = SystemgetSecurityManager();
if (fdObj == null) {
throw new NullPointerException();
}
if (security != null) {
securitycheckRead(fdObj);
}
fd = fdObj;
}
//其他代碼
}
可見FileInputStream繼承了InputStream組合了FileDescriptor采用的是對象Adapter模式我們學習i/o庫時主要應該掌握這四個對象Adapter模式的適配源: ByteArrayInputStream的適配源是Byte數組 FileInputStream的適配源是File對象 PipedInputStream的適配源是PipedOutputStream對象 StringBufferInputStream的適配源是String對象其它三個系列類的學習方法與此相同
知識點三: Decorator功能
InputStream的其它三個直接子類采用的是Decorator模式<<java與模式>>中描述得比較清楚其實我們不用管它采用什麼模式看看代碼就明白了 FilterInputStream部分代碼如下:
Public class FilterInputStream extends InputStream {
/**
* The input stream to be filtered
*/
protected InputStream in;
protected FilterInputStream(InputStream in) {
thisin = in;
}
//其它代碼
}
看清楚沒有? FilterInputStream繼承了InputStream也引用了InputStream而它有四個子類這就是所謂的Decorator模式我們暫時可以不管為什麼要用Decorator模式但我們現在應該知道:因為InputStream還有其它的幾個子類所以我們可以將其它子類作為參數來構造FilterInputStream對象!這是我們開發時常用的功能代碼示例如下:
{
//從密鑰文件中讀密鑰
SecretKey key=null;
ObjectInputStream keyFile=new ObjectInputStream(
new FileInputStream(c:\\安全文件\\對稱密鑰\\yhbdes));
key=(SecretKey)keyFilereadObject();
keyFileclose();
}
上面的代碼中 ObjectInputStream也是InputStream的子類也使用了Decorator功能不過就算你不懂也不想懂Decorator模式只要記住本文給出的FilterInputStream 的兩段代碼即可
掌握了以上三點相信我們已經能夠很好的應用java i/o庫
From:http://tw.wingwit.com/Article/program/Java/hx/201311/26161.html