?對象流:
數據流只能實現對基本數據類型和字符串類型的讀寫,并不能讀取對象(字符串除外),如果要對某個對象進行讀寫操作,則需要對象流。
使用:
?ObjectInputStream/ObjectOutputStream是以“對象”為數據源,但是必須將傳輸的對象進行序列化與反序列化操作。

結果;

序列化和反序列化:
把Java對象轉換為字節(jié)序列的過程稱為對象的序列化。把字節(jié)序列恢復為Java對象的過程稱為對象的反序列化。
特點:
[if !supportLists]1)???? [endif]序列化能保存的元素
[if !supportLists]a)????? [endif]只能保存對象的非靜態(tài)成員變量
[if !supportLists]b)???? [endif]不能保存任何成員方法和靜態(tài)的成員變量
[if !supportLists]c)????? [endif]不保存transient成員變量
[if !supportLists]d)???? [endif]如果一個對象的成員變量是一個對象,這個對象的成員變量也會保存
[if !supportLists]e)????? [endif]串行化保存的只是變量的值,對于變量的任何修飾符,都不能保存
[if !supportLists]2)???? [endif]使用對象流把一個對象寫到文件時不僅保證該對象是序列化的,而且該對象的成員對象也必須是可序列化的。
[if !supportLists]3)???? [endif]如果一個可序列化的對象包含對某個不可序列化的對象的引用,那么整個序列化操作將會失敗,并且會拋出一個NotSerializableException。我們可以將這個引用標記為transient,那么對象仍然可以序列化。
對象序列化注意事項
[if !supportLists]1)???? [endif]同一個對象多次序列化的處理
[if !supportLists]a)????? [endif]所有保存到磁盤中的對象都有一個序列化編號
序列化一個對象中,首先檢查該對象是否已經序列化
文件夾的復制:
涉及流:字節(jié)流,字符流
BufferedInputStream,BufferedOutputStream
FileInputStream,FileOutputStream
問題分解
復制一個文件
指定目錄下的所有文件
指定目錄下的所有文件及子目錄下的所有文件

結果:


字節(jié)數組流:
ByteArrayInputStream和ByteArrayOutputStream經常用在需要流和數組之間轉化的情況!
FileInputStream是把文件當做數據源。ByteArrayInputStream則是把內存中的”某個字節(jié)數組對象”當做數據源。


裝飾器模式簡介:
動態(tài)的為一個對象增加新的功能
裝飾模式是一種用于代替繼承的技術,無須通過繼承增加子類就能擴展對象的新功能。使用對象的關聯關系代替繼承關系,更加靈活,同時避免類型體系的快速膨脹。
實現細節(jié):
抽象構件角色?? ICar
具體的構件角色Car
裝飾器角色?? SuperCar
具體的裝飾器角色FlyCar、WaterCar、AICar
優(yōu)點:
[if !supportLists]1)???? [endif]擴展對象功能,比繼承靈活,不會導致類個數急劇增加
[if !supportLists]2)???? [endif]可以對一個對象進行多次裝飾,創(chuàng)建出不同行為的組合,得到功能更加大的對象
[if !supportLists]3)???? [endif]具體構建類和具體裝飾類可以獨立變化,用戶可以根據需要自己增加新的具體構件子類和具體裝飾子類
缺點
[if !supportLists]1)???? [endif]產生很多小對象。大量小對象占據內存,一定程序上影響性能
[if !supportLists]2)???? [endif]裝飾模式易于出錯,調試排查比較麻煩
IO流實現細節(jié)
(1)抽象構件角色?InputStream,OutputStream,Reader,Writer
(2)具體構件角色?FileInputStream,FileOutputStream
(3)裝飾器角色??FilterInputStream,FilterOutputStream
?? 持有一個抽象構件的引用
(4)具體裝飾角色?
BufferedInputStream,BufferedOutputStream等
IO流體系總結:

Apache IOUtils的使用_Apache FileUtils的使用:
Commons IO是apache的一個開源的工具包,封裝了IO操作的相關類,使用Commons
IO可以很方便的讀寫文件,
1IOUtils:IOUtils則是提供了讀寫文件的方法
IOUtils工具類操作的相關方法
(1)String? ?IOUtils.toString(InputStream input)傳入輸入流對象返回字符串
FileUtils中提供了許多設計文件操作的 已封裝好的方法。
FileUtils工具類操作的相關方法
(1)StringFileUtils.readFileToString(File file,String encoding)
?? FileUtils.writeStringToFile(File file,Stringdata,String encoding)讀寫文件
(2)FileUtils.copyFile(FilesrcFile,File destFile)復制文件
(3)FileUtils.copyURLToFile(URLsource,File destination)復制url對象到指定文件