2017-05-06 221 views
1

ByteArrayOutputStreamBufferedOutputStream都通過將數據放入內存中的數組來進行緩衝。所以我的問題是ByteArrayOutputStream和BufferedOutputStream之間的區別

  1. 這兩者之間有什麼區別。
  2. 當使用ByteArrayOutputStream以及何時使用BufferedOutputStream

有人能幫助我在上面兩個問題,因爲我對這個困惑。

+0

這個問題是完全不同的,它說「在圍繞ByteArrayOutputStream包裝BufferedOutputStream而不是僅僅使用ByteArrrayOutputStream本身有什麼優勢嗎?」我讀了這個問題,但沒有什麼請再次檢查 –

+0

只有在interner上發現的差異是BufferedOutputStream將數據寫入另一個流。 ByteArrayOutputStream將數據寫入字節數組。 –

+0

請你能解釋一下嗎? –

回答

3

只要看看的Javadoc:

ByteArrayOutputStream

此類實現,其中的數據被寫入一個字節數組的輸出流。

BufferedOutputStream

該類實現緩衝的輸出流。通過設置這樣的輸出流,應用程序可以將字節寫入底層輸出流,而不必爲寫入的每個字節調用底層系統。

所以,那些實際上有兩個非常不同的東西:

  • 當你知道你有一些數據,到底你需要儘可能的字節數組你使用的第一個
  • 第二個僅僅是圍繞任何其他類型的輸出流的包裝 - 它增加了緩衝。

這就是這一切!

如果您想體驗不同的行爲:創建一個寫入文件的緩衝區和一個數組。然後只是繼續推送字節到每一個。陣列一會在某個點引起內存問題,另一個可能不會停止,直到所有磁盤空間用完。

2

ByteArrayOutputStream將字節寫入內存中的字節數組。不適用於任何其他目標,如文件或網絡套接字。寫入數據後,您可以通過調用toByteArray()來獲取字節數組。

BufferedOutputStream包裝另一個,底層OutputStream並提供該底層流的緩衝,以使I/O操作更有效。基礎流可以是任何種類的OutputStream,例如寫入文件或網絡套接字的流。

爲什麼您可能想要使用緩衝:將大塊數據寫入文件系統比逐字節寫入效率更高。如果您的程序需要寫入許多小塊數據,首先將這些小塊收集到緩衝區中,然後將整個緩衝區一次寫入磁盤會更有效。這是BufferedOutputStream自動爲你做的。

相關問題