[十一]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接口




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM