[十一]JavaIO之DataInputStream 和 DataOutputStream


功能簡介

DataInputStream和DataOutputStream 繼承了各自的FilterInputStream以及FilterOutputStream
使用裝飾器模式對InputStream和OutputStream進行功能加強

FilterInputStream以及FilterOutputStream 都是Decorator 抽象的裝飾器角色(並非抽象類)
他們內部都包含了各自須要加強的抽象構建
image_5b986c00_4b85


DataInput         接口用於從二進制流中讀取字節,並根據全部 Java 基本類型數據進行重構
DataOutput       
接口用於將數據從任意 Java 基本類型轉換爲一系列字節,並將這些字節寫入二進制流



image_5b986c00_1b9f

image_5b986c00_5501
DataInputStream和DataOutputStream  經過實現DataInput 和DataOut接口
而且藉助於裝飾器模式,對InputStream和OutputStream的read方法加強出來多個版本
能夠讀取基本數據類型

DataInputStream

繼承自InputStream中的read的兩個版本方法
都是直接使用原方法
image_5b986c00_87d
能夠看到,去掉read和個別獨有的方法外
其他方法都來自DataInput

image_5b986c00_7912

而其餘的方法都是須要依賴於read的兩個版本的方法
好比下面這幾個,都是對in.read調用的基礎上,進行功能的加強
若是說都不使用in.read方法,那還叫什麼裝飾器模式

image_5b986c00_4864


DataOutputStream

write兩個版本都來自OutputStream,沒有功能加強
flush也是如此,沒有加強


image_5b986c00_70ae
不過DataOutputStream 內部有一個計數器,用於記錄已經讀取的個數
incCount方法用於計數
image_5b986c00_8bd
其他來自DataOutput的方法,都是藉助於裝飾器模式對於write方法的加強
image_5b986c00_52bc
好比
image_5b986c00_2f6f


必定要理解裝飾器模式
是你還有你
在使用你的能力的時候,順便在加強一下,因此內部天然會須要藉助於原來的方法


總結:

DataInputStream和DataOutputStream 藉助於裝飾器模式,繼承自他們的FilterXXXoutStream
對InputStream進行功能加強
全部加強出來的功能,來自於DataInput以及DataOutput
這兩個接口是用於約定 從二進制字節中讀取數據 以及將基本類型數據寫入到二進制字節的兩個接口
其實若是說要不是別的地方也仍是須要DataInput以及DataOutput中的約定的話
這一切徹底均可以去掉這兩個接口,直接提供readXXX 或者writeXXX方法便可
因此千萬不要被DataInput以及DataOutput 迷惑

兩條主線:裝飾器模式功能加強加強的功能來自DataXXXput接口
相關文章
相關標籤/搜索