現在的位置: 首頁 > 編程語言 > 正文

什麼是緩衝區?什麼是通道

2020年06月05日 編程語言 ⁄ 共 1204字 ⁄ 字型大小 評論關閉

  通道是對原I/O包中的流的模擬。到任何目的地(或來自任何地方)的所有數據都必須通過一個Channel對象。一個Buffer實質上是一個容器對象。發送給一個通道的所有對象都必須首先放到緩衝區中;同樣地,從通道中讀取的任何數據都要讀到緩衝區中。下面學步園小編來講解下什麼是緩衝區?什麼是通道?

  什麼是緩衝區

  Buffer是一個對象,它包含一些要寫入或者剛讀出的數據。在NIO中加入Buffer對象,體現了新庫與原I/O的一個重要區別。在面向流的I/O中,您將數據直接寫入或者將數據直接讀到Stream對象中。

  在NIO庫中,所有數據都是用緩衝區處理的。在讀取數據時,它是直接讀到緩衝區中的。在寫入數據時,它是寫入到緩衝區中的。任何時候訪問NIO中的數據,您都是將它放到緩衝區中。

  緩衝區實質上是一個數組。通常它是一個位元組數組,但是也可以使用其他種類的數組。但是一個緩衝區不僅僅是一個數組。緩衝區提供了對數據的結構化訪問,而且還可以跟蹤系統的讀/寫進程。

  緩衝區類型

  最常用的緩衝區類型是ByteBuffer.一個ByteBuffer可以在其底層位元組數組上進行get/set操作(即位元組的獲取和設置)。

  ByteBuffer不是NIO中唯一的緩衝區類型。事實上,對於每一種基本Java類型都有一種緩衝區類型:

  ByteBufferCharBufferShortBufferIntBufferLongBufferFloatBufferDoubleBuffer每一個Buffer類都是Buffer介面的一個實例。除了ByteBuffer,每一個Buffer類都有完全一樣的操作,只是它們所處理的數據類型不一樣。因為大多數標準I/O操作都使用ByteBuffer,所以它具有所有共享的緩衝區操作以及一些特有的操作。

  現在您可以花一點時間運行UseFloatBuffer.java,它包含了類型化的緩衝區的一個應用例子。

  什麼是通道

  Channel是一個對象,可以通過它讀取和寫入數據。拿NIO與原來的I/O做個比較,通道就像是流。

  正如前面提到的,所有數據都通過Buffer對象來處理。您永遠不會將位元組直接寫入通道中,相反,您是將數據寫入包含一個或者多個位元組的緩衝區。同樣,您不會直接從通道中讀取位元組,而是將數據從通道讀入緩衝區,再從緩衝區獲取這個位元組。

  通道類型

  通道與流的不同之處在於通道是雙向的。而流只是在一個方向上移動(一個流必須是InputStream或者OutputStream的子類),而通道可以用於讀、寫或者同時用於讀寫。

  因為它們是雙向的,所以通道可以比流更好地反映底層操作系統的真實情況。特別是在UNIX模型中,底層操作系統通道是雙向的。

  以上就是關於「什麼是緩衝區?什麼是通道」的內容,希望對大家有用。更多資訊請關注學步園。學步園,您學習IT技術的優質平台!

  

抱歉!評論已關閉.