2013-04-30 66 views
0

最近我一直在探索java.io包,我一直在想我在哪裏可以找到InputStream和OutputStream中抽象類所執行的確切過程。InputStream和OutputStream抽象方法

我很頭痛,因爲至少根據源代碼,核心方法都是抽象的(例如,InputStream.read()OutputStream.write(int b))。我特別擔心的是密切的方法,javadoc明確表示他們什麼都不做:

關閉此輸入流並釋放與該流關聯的所有系統資源。

close方法InputStream什麼都不做。

那麼,輸入流顯然寫輸出流讀取,肯定close()必須做的沖洗和資源釋放。

有人能給我一個解釋嗎?

回答

1

這些類是抽象的,因爲這樣它們可以很容易地擴展,實現者類可以使用Decorator模式(如圖所示here)。使用裝飾器模式,實現者類可以在運行時添加動態功能。例如:有一個InputStream可以使用FileInputStream讀取文件,該文件可以使用ObjectInputStream讀取序列化對象。如何做到這一點?

ObjectInputStream ois = new ObjectInputStream(
    new FileInputStream(new File("/path/to/file.dat")); 
+0

確實很多流都從這些抽象類繼承。但是,如果不使用任何繼承類,'inputstream'和'outputstream'都可以工作並做某些事情。他們確實可以發送和接收字節。我正在問這個過程的核心階段,沒有任何擴展類。 :) 有任何想法嗎? – Ruluk 2013-04-30 20:46:28

+0

@Ruluk如果你的意思是使用普通的'InputStream'和'OutputStream',你根本就不能做,因爲它們是'abstract'類。你總是**需要使用這些類的實現。請注意,實現類包含真正的邏輯/工作。 – 2013-04-30 21:26:26

+0

感謝您的信息!我認爲它做了一些事情,因爲我直接在一個教程中使用它們,但現在我進一步分析了它們,它們只是引用後代類的基礎流。 – Ruluk 2013-05-01 12:39:07