2017-07-26 12 views
-1

我是新來的Java中的I/O,並在本網站上的帖子說的一個閱讀:即使的Java I/O流的定義和亞型

所有流的行爲以同樣的方式,它們所鏈接的實際物理設備是不同的。因此,相同的I/O類和方法可以適用於引自任何類型的設備

的:Stream definition

我不能換我的頭周圍是怎麼回事,所有的數據流(以例如不同的字節流亞型 - 的BufferedInputStreamFilterInputStream中ObjectInputStream的,...,等等)的行爲相同的方式,並且可以連接到任何物理設備,當它們爲不同的類實現爲所謂的報價變化的功能和適應不同的來源/目的地?例如,我可以用ObjectInputStream的FileOutputStream中讀取和寫入到控制檯?不同的數據流,不同的設備,以及所有(流)可以連接到所有的(設備) - 我在這裏的損失..

回答

3

的報價不說,你可以連接任何任何設備,正如你所說。有連接到特定設備的InputStreamOutputStream不同的實現 - 例如,FileInputStream連接到文件系統中的文件,並ByteArrayInputStream連接到在存儲器中的字節數組。

引用解釋的主要思想是,所有這些不同類型的流都是類InputStreamOutputStream的所有擴展,因此您可以使用任何特定類型的流在流上執行所有常見操作,無論特定類型的數據流在哪裏讀取或寫入數據。

有些流是周圍的其他流包裝,添加特定的功能。例如,BufferedOutputStream將緩衝添加到基礎流。這通常很有用,因爲對於某些流,寫入數據塊比逐字節寫入效率更高 - BufferedOutputStream收集您寫入緩衝區的字節,然後將其寫入基礎數據流作爲一個數據塊。 ObjectOutputStream是另一個包裝器,它增加了將可序列化Java對象轉換爲可寫入底層流的字節的功能。

+0

但它表示「相同的I/O類和方法可以應用於任何類型的設備」,它指的是具體的具體類。在InputStream和OutputStream中建立的公共核心功能可以爲上下文理解關於所有流行爲類似的聲明的第一部分 - 您關於通過不同實現提供通用功能的觀點,但是關於相同類和方法的部分鏈接到不同設備限於不同的具體類別(流)的解釋 – Surfer

+0

聲明對我來說唯一的方法是如果通過「所有流的行爲方式相同」中的「所有流」,它意味着所有流單獨採用,而不是這樣即使給定類型的流連接到不同的設備,也可以以相同的方式運行給定類型的流 - 也就是說,無論使用場景如何,流仍然表現相同,因爲接口(類方法)是相同並且抽象出不同的硬件特性。那就適用於所有的流。 – Surfer

+0

這個解釋的問題是,語言的人並沒有給予太多的認可(儘管並不完全排除它)。 – Surfer

1

不能使用每一個流的每個設備。根據你的問題(由我粗體)的定義,

所有流的行爲以同樣的方式

所以,你可以利用每一個流都相同,這意味着每個Stream具有相同的方法,因爲它們從java.io.OutputStreamjava.io.InputStream繼承。

所以不要緊,你是否要寫入到控制檯或文件或網知識插口,可以如總是向設備寫入一個字節數組。

然而,存在不同的處理寫這個字節數組不同的實現。