通道是對原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技術的優質平台!