功能簡介
DataInputStream和DataOutputStream 繼承了各自的FilterInputStream以及FilterOutputStream
使用裝飾器模式對InputStream和OutputStream進行功能增強
DataInput | 接口用於從二進制流中讀取字節,並根據所有 Java 基本類型數據進行重構 |
DataOutput
|
接口用於將數據從任意 Java 基本類型轉換為一系列字節,並將這些字節寫入二進制流 |
![]() |
![]() |
DataInputStream和DataOutputStream 通過實現DataInput 和DataOut接口 並且借助於裝飾器模式,對InputStream和OutputStream的read方法增強出來多個版本 可以讀取基本數據類型 |
DataInputStream
繼承自InputStream中的read的兩個版本方法
都是直接使用原方法
|
可以看到,去掉read和個別獨有的方法外 其余方法都來自DataInput ![]() |
而其他的方法都是需要依賴於read的兩個版本的方法 比如下面這幾個,都是對in.read調用的基礎上,進行功能的增強 如果說都不使用in.read方法,那還叫什么裝飾器模式 ![]() |
DataOutputStream
write兩個版本都來自OutputStream,沒有功能增強 flush也是如此,沒有增強 ![]()
不過DataOutputStream 內部有一個計數器,用於記錄已經讀取的個數
incCount方法用於計數
![]() |
其余來自DataOutput的方法,都是借助於裝飾器模式對於write方法的增強![]() 比如 ![]() |
一定要理解裝飾器模式 是你還有你 在使用你的能力的時候,順便在增強一下,所以內部自然會需要借助於原來的方法 |
總結:
DataInputStream和DataOutputStream 借助於裝飾器模式,繼承自他們的FilterXXXoutStream
對InputStream進行功能增強
所有增強出來的功能,來自於DataInput以及DataOutput
這兩個接口是用於約定 從二進制字節中讀取數據 以及將基本類型數據寫入到二進制字節的兩個接口
其實如果說要不是別的地方也還是需要DataInput以及DataOutput中的約定的話
這一切完全都可以去掉這兩個接口,直接提供readXXX 或者writeXXX方法即可
所以千萬不要被DataInput以及DataOutput 迷惑
兩條主線: 裝飾器模式功能增強 增強的功能來自DataXXXput接口 |