|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一個類別 下一個類別 | 框架 無框架 | |||||||||
摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 |
java.lang.Object java.nio.Buffer
public abstract class Buffer
一個用於特定基本型別資料的容器。
緩衝區是特定基本型別元素的線性有限序列。除內容外,緩衝區的基本屬性還包括容量、限制和位置:
緩衝區的容量 是它所包含的元素的數量。緩衝區的容量不能為負並且不能更改。
緩衝區的限制 是第一個不應該讀取或寫入的元素的索引。緩衝區的限制不能為負,並且不能大於其容量。
緩衝區的位置 是下一個要讀取或寫入的元素的索引。緩衝區的位置不能為負,並且不能大於其限制。
對於每個非 boolean 基本型別,此類別都有一個子類別與之對應。
此類別的每個子類別都定義了兩種獲取 和放置 操作:
相對 操作讀取或寫入一個或多個元素,它從當前位置開始,然後將位置增加所傳輸的元素數。如果請求的傳輸超出限制,則相對獲取 操作將拋出
BufferUnderflowException
,相對放置 操作將拋出BufferOverflowException
;這兩種情況下,都沒有資料被傳輸。絕對 操作採用顯式元素索引,該操作不影響位置。如果索引參數超出限制,絕對獲取 操作和放置 操作將拋出
IndexOutOfBoundsException
。
當然,通過適當通道的 I/O 操作(通常與當前位置有關)也可以將資料傳輸到緩衝區或從緩衝區傳出資料。
緩衝區的標記 是一個索引,在調用 reset
方法時會將緩衝區的位置重置為該索引。並非總是需要定義標記,但在定義標記時,不能將其定義為負數,並且不能讓它大於位置。如果定義了標記,則在將位置或限制調整為小於該標記的值時,該標記將被丟棄。如果未定義標記,那麼調用 reset
方法將導致拋出 InvalidMarkException
。
標記、位置、限制和容量值遵守以下不變式:
0 <= 標記 <= 位置 <= 限制 <= 容量
新創建的緩衝區總有一個 0 位置和一個未定義的標記。初始限制可以為 0,也可以為其他值,這取決於緩衝區型別及其建構方式。一般情況下,緩衝區的初始內容是未定義的。
除了存取位置、限制、容量值的方法以及做標記和重置的方法外,此類別還定義了以下可對緩衝區進行的操作:
clear()
使緩衝區為一系列新的通道讀取或相對放置 操作做好準備:它將限制設置為容量大小,將位置設置為 0。
flip()
使緩衝區為一系列新的通道寫入或相對獲取 操作做好準備:它將限制設置為當前位置,然後將位置設置為 0。
rewind()
使緩衝區為重新讀取已包含的資料做好準備:它使限制保持不變,將位置設置為 0。
每個緩衝區都是可讀取的,但並非每個緩衝區都是可寫入的。每個緩衝區類別的轉變方法都被指定為可選操作,當對只讀緩衝區調用時,將拋出 ReadOnlyBufferException
。只讀緩衝區不允許更改其內容,但其標記、位置和限制值是可變的。可以調用其 isReadOnly
方法確定緩衝區是否為只讀。
多個當前執行緒使用緩衝區是不安全的。如果一個緩衝區由不止一個執行緒使用,則應該通過適當的同步來控制對該緩衝區的存取。
指定此類別中的方法返回調用它們的緩衝區(否則它們不會返回任何值)。此操作允許將方法調用組成一個鏈;例如,語句序列
可以由以下更緊湊的一個語句代替b.flip(); b.position(23); b.limit(42);
b.flip().position(23).limit(42);
方法摘要 | |
---|---|
abstract Object |
array()
返回此緩衝區的底層實作陣列(可選操作)。 |
abstract int |
arrayOffset()
返回此緩衝區的底層實作陣列中第一個緩衝區元素的偏移量(可選操作)。 |
int |
capacity()
返回此緩衝區的容量。 |
Buffer |
clear()
清除此緩衝區。 |
Buffer |
flip()
反轉此緩衝區。 |
abstract boolean |
hasArray()
告知此緩衝區是否具有可存取的底層實作陣列。 |
boolean |
hasRemaining()
告知在當前位置和限制之間是否有元素。 |
abstract boolean |
isDirect()
告知此緩衝區是否為直接緩衝區。 |
abstract boolean |
isReadOnly()
告知此緩衝區是否為只讀緩衝區。 |
int |
limit()
返回此緩衝區的限制。 |
Buffer |
limit(int newLimit)
設置此緩衝區的限制。 |
Buffer |
mark()
在此緩衝區的位置設置標記。 |
int |
position()
返回此緩衝區的位置。 |
Buffer |
position(int newPosition)
設置此緩衝區的位置。 |
int |
remaining()
返回當前位置與限制之間的元素數。 |
Buffer |
reset()
將此緩衝區的位置重置為以前標記的位置。 |
Buffer |
rewind()
重繞此緩衝區。 |
從類別 java.lang.Object 繼承的方法 |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
方法詳細資訊 |
---|
public final int capacity()
public final int position()
public final Buffer position(int newPosition)
newPosition
- 新位置值;必須為非負且不大於當前限制
IllegalArgumentException
- 如果 newPosition 不滿足先決條件public final int limit()
public final Buffer limit(int newLimit)
newLimit
- 新限制值;必須為非負且不大於此緩衝區的容量
IllegalArgumentException
- 如果 newLimit 不滿足先決條件public final Buffer mark()
public final Buffer reset()
調用此方法不更改也不丟棄標記的值。
InvalidMarkException
- 如果尚未設置標記public final Buffer clear()
在使用一系列通道讀取或放置 操作填充此緩衝區之前調用此方法。例如:
buf.clear(); // Prepare buffer for reading in.read(buf); // Read data
此方法不能實際清除緩衝區中的資料,但從名稱來看它似乎能夠這樣做,這樣命名是因為它多數情況下確實是在清除資料時使用。
public final Buffer flip()
在一系列通道讀取或放置 操作之後,調用此方法為一系列通道寫入或相對獲取 操作做好準備。例如:
buf.put(magic); // Prepend header in.read(buf); // Read data into rest of buffer buf.flip(); // Flip buffer out.write(buf); // Write header + data to channel
當將資料從一個地方傳輸到另一個地方時,經常將此方法與 compact
方法一起使用。
public final Buffer rewind()
在一系列通道寫入或獲取 操作之前調用此方法(假定已經適當設置了限制)。例如:
out.write(buf); // Write remaining data buf.rewind(); // Rewind buffer buf.get(array); // Copy data into array
public final int remaining()
public final boolean hasRemaining()
public abstract boolean isReadOnly()
public abstract boolean hasArray()
如果此方法返回 true,則可以安全地調用 array
和 arrayOffset
方法。
public abstract Object array()
此方法旨在使具有底層實作陣列的緩衝區能更有效地傳遞給本機程式碼。具體子類別為此方法提供更強型別的返回值。
對此緩衝區內容進行修改將導致返回陣列的內容被修改,反之亦然。
調用此方法前應調用 hasArray
方法,以確保此緩衝區存在可存取的底層實作陣列。
ReadOnlyBufferException
- 如果此緩衝區存在底層實作陣列,但它是只讀的
UnsupportedOperationException
- 如果此緩衝區不存在可存取的底層實作陣列public abstract int arrayOffset()
如果此緩衝區存在底層實作陣列,那麼緩衝區位置 p 對應於陣列索引 p + arrayOffset()。
調用此方法前應調用 hasArray
方法,以確保此緩衝區存在可存取的底層實作陣列。
ReadOnlyBufferException
- 如果此緩衝區存在底層實作陣列,但它是只讀的
UnsupportedOperationException
- 如果此緩衝區不存在可存取的底層實作陣列public abstract boolean isDirect()
|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一個類別 下一個類別 | 框架 無框架 | |||||||||
摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 |
版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only。