ByteBuffer 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
一個位元組緩衝區。
[Android.Runtime.Register("java/nio/ByteBuffer", DoNotGenerateAcw=true)]
public abstract class ByteBuffer : Java.Nio.Buffer, IDisposable, Java.Lang.IComparable
[<Android.Runtime.Register("java/nio/ByteBuffer", DoNotGenerateAcw=true)>]
type ByteBuffer = class
inherit Buffer
interface IComparable
interface IJavaObject
interface IDisposable
interface IJavaPeerable
- 繼承
- 衍生
- 屬性
- 實作
備註
一個位元組緩衝區。
此類別定義了六類位元組緩衝區操作:
<UL>
<李>
絕對與相對 #get() <i>get</i> ,以及 #put(byte) <i>put</i> 讀寫單一位元組的方法;
</李>
<李>
絕對與相對 #get(byte[]) <i>bulk get</i> 方法,將連續的位元組序列從緩衝區轉移到陣列;
</李>
<李>
絕對與相對 #put(byte[]) <i>bulk put</i> 方法,將連續的位元組序列從位元組陣列或其他位元組緩衝區轉移到該緩衝區;
</李>
<李>
絕對值與相對 #getChar() <i>get</i> 值,以及 #putChar(char) <i>put</i> 讀寫其他原始型態值的方法,並以特定位元組順序將其轉換成位元組序列;
</李>
<李>
建立 檢視緩衝區的方法,允許將位元組緩衝區視為包含其他原始類型值的緩衝區;以及
</李>
<李>
一個位 #compact compacting 元組緩衝區的方法。
</李>
</ul>
位元組緩衝區可以由 #allocate <i>allocation</i>創建,該緩衝區會分配空間給緩衝區
內容,或由 #wrap(byte[]) <i>wrapping</i> 現有的位元組陣列 {#if[char]?or string} 進入緩衝區。
「direct」><h2>直接與 非直接緩衝區 </h2>
位元組緩衝區分為 直接 緩衝區或 非直接緩衝區。 在直接位元組緩衝區的情況下,Java 虛擬機器會盡力直接對其執行原生 I/O 操作。 也就是說,它會嘗試避免在每次呼叫底層作業系統原生 I/O 操作之前或之後,將緩衝區內容複製到(或從)中介緩衝區複製。
可透過呼叫 #allocateDirect(int) allocateDirect 此類別的工廠方法建立直接位元組緩衝區。 此方法回傳的緩衝區通常比非直接緩衝區的分配與分配成本略高。 直接緩衝區的內容可能位於正常垃圾回收堆積之外,因此它們對應用程式記憶體佔用的影響可能不明顯。 因此建議直接緩衝區主要分配給受底層系統原生 I/O 操作約束的大型且長壽命緩衝區。 一般而言,只有在直接緩衝區能帶來可衡量的程式效能提升時,才應配置。
直接位元組緩衝區也可以由 java.nio.channels.FileChannel#map mapping 檔案的某個區域直接建立到記憶體中。 Java 平台的實作可選擇性地支援透過 JNI 從原生程式碼建立直接位元組緩衝區。 若其中一種緩衝區的實例指向無法存取的記憶體區域,嘗試存取該區域不會改變緩衝區內容,且會在存取時或稍後某個時間拋出未指定例外。
位元組緩衝區是直接緩衝區還是非直接緩衝區,可透過調用其 #isDirect isDirect 方法來判斷。 此方法的提供是為了在效能關鍵的程式碼中能進行明確的緩衝區管理。
“bin”h2><> 存取二進位資料 </h2>
此類別定義了除 外,所有其他原始型態 boolean值的讀寫方法。 原始值會依據緩衝區目前的位元組順序轉換成(或從)位元組序列,這些位元組可透過這些 #order order 方法檢索並修改。 特定的位元組順序由該類別的 ByteOrder 實例來表示。 位元組緩衝區的初始順序總是 ByteOrder#BIG_ENDIAN BIG_ENDIAN。
為了存取異質二進位資料,也就是不同類型的值序列,此類別為每個類型定義了一族的絕對與相對 取得 與 放置 方法。 例如,對於 32 位元浮點數值,這個類別定義:
<引用>
float {@link #getFloat()}
float {@link #getFloat(int) getFloat(int index)}
void {@link #putFloat(float) putFloat(float f)}
void {@link #putFloat(int,float) putFloat(int index, float f)}
</區塊引用>
對應的方法定義於類型 char, short, int, long、 和 double。 絕對 get 與 put 方法的索引參數是以位元組為單位,而非以讀取或寫入的型別為單位。
「觀點」>
為了存取同質二進位資料,也就是同類型的數值序列,這個類別定義了能建立給定位元組緩衝區 視圖 的方法。
檢視緩衝區只是另一個由位元組緩衝區支持內容的緩衝區。 位元組緩衝區內容的變更會在檢視緩衝區中顯示,反之亦然;這兩個緩衝區的位置、極限和標記值是獨立的。 例如,該 #asFloatBuffer() asFloatBuffer 方法會建立一個由呼叫該方法的位元組緩衝區所支援的類別實例 FloatBuffer 。 對應的視圖建立方法定義於類型 char, short, int, long、 和 double。
檢視緩衝區相較於上述類型專屬 的 get and put 方法有三個重要優勢:
<UL>
<李>
檢視緩衝區的索引不是以位元組為單位,而是依其值的類型大小來標示;
</李>
<李>
檢視緩衝區提供相對大量的 取得 與 放置 方法,能在緩衝區與陣列或其他同類型緩衝區間連續的數值序列傳輸;以及
</李>
<李>
視圖緩衝區可能更有效率,因為它是直接的,當且僅當其後備位元組緩衝區是直接的。
</李>
</ul>
視圖緩衝區的位元組順序固定為建立視圖時的位元組緩衝區。
<h2> 召喚鏈 </h2>
此類別中沒有其他可回傳值的方法,會指定回傳呼叫時的緩衝區。 這使得方法調用可以串接起來。
陳述序列
<引用>
bb.putInt(0xCAFEBABE);
bb.putShort(3);
bb.putShort(45);
</區塊引用>
例如,可以被替換為單一陳述
<引用>
bb.putInt(0xCAFEBABE).putShort(3).putShort(45);
</區塊引用>
在 1.4 版本加入。
此頁面的部分是根據 Android 開放原始碼專案所建立和共用的工作進行修改,並根據 Creative Commons 2.5 屬性授權中所述的詞彙使用。
建構函式
| 名稱 | Description |
|---|---|
| ByteBuffer(IntPtr, JniHandleOwnership) |
用於建立 JNI 物件受管理表示的建構器;由執行時呼叫。 |
屬性
| 名稱 | Description |
|---|---|
| Char |
將字元返回當前位置,並將位置增加2。 |
| Class |
回傳此 |
| Double |
在當前局面回放雙倍,並將局面增加8。 |
| Float |
將浮點數回傳當前位置,並將該位置增加4。 |
| Handle |
底層 Android 實例的帳號。 (繼承來源 Object) |
| HasArray |
判斷此緩衝區是否有可存取的位元組陣列作為後盾。 |
| HasRemaining |
表示目前位置與極限之間是否存在任何元素。 (繼承來源 Buffer) |
| Int |
回傳當前位置的整數,並將該位置增加 4。 |
| IsDirect |
如果這是直接緩衝區,則會回傳真值。 (繼承來源 Buffer) |
| IsReadOnly |
顯示此緩衝區是否為唯讀。 (繼承來源 Buffer) |
| JniIdentityHashCode |
取得由互通執行時指派給此 Java 對等端的身份雜湊碼。 (繼承來源 Object) |
| JniManagedPeerState |
一個位元組緩衝區。 (繼承來源 JavaObject) |
| JniPeerMembers |
一個位元組緩衝區。 |
| Long |
回放當前持倉的多頭,並將持倉增加8。 |
| PeerReference |
取得這個 Java 節點的 JNI 物件參考。 (繼承來源 Object) |
| Short |
回傳當前位置的空頭,並將該部位增加2。 |
| ThresholdClass |
此 API 支援 Mono for Android 基礎架構,並非直接從你的程式碼中使用。 |
| ThresholdType |
此 API 支援 Mono for Android 基礎架構,並非直接從你的程式碼中使用。 |
方法
| 名稱 | Description |
|---|---|
| AlignedSlice(Int32) |
建立一個新的位元組緩衝區,其內容是該緩衝區內容的共享且對齊的子序列。 |
| AlignmentOffset(Int32, Int32) |
回傳記憶體位址,指向給定索引的位元組,模給定的單位大小。 |
| Allocate(Int32) |
分配一個新的位元組緩衝區。 |
| AllocateDirect(Int32) |
分配一個新的直接位元組緩衝區。 |
| ArrayOffset() |
回傳該緩衝區後方陣列中緩衝區第一個元素的偏移量 (可選操作)。 |
| AsCharBuffer() |
建立這個位元組緩衝區的視圖,作為字元緩衝區。 |
| AsDoubleBuffer() |
建立一個位元組緩衝區的雙重緩衝區視圖。 |
| AsFloatBuffer() |
建立一個位元組緩衝區的視圖,作為浮點緩衝區。 |
| AsIntBuffer() |
建立這個位元組緩衝區的視圖,作為整數緩衝區。 |
| AsLongBuffer() |
建立一個長緩衝區的位元組緩衝區視圖。 |
| AsReadOnlyBuffer() |
建立一個新的唯讀位元組緩衝區,共享該緩衝區的內容。 |
| AsShortBuffer() |
建立一個位元組緩衝區的視圖,作為短緩衝區。 |
| Capacity() |
回傳這個緩衝區的容量。 (繼承來源 Buffer) |
| Clear() |
清除這個緩衝區。 (繼承來源 Buffer) |
| Clone() |
建立並回傳此物件的副本。 (繼承來源 Object) |
| Compact() |
壓縮此緩衝區 (可選操作)。 |
| CompareTo(ByteBuffer) |
將此緩衝區與另一個緩衝區進行比較。 |
| Construct(JniObjectReference, JniObjectReferenceOptions) |
一個位元組緩衝區。 (繼承來源 JavaObject) |
| Dispose() |
釋放該 Java 節點所持有的資源。 (繼承來源 Object) |
| Dispose(Boolean) |
釋放該 Java 節點所持有的資源。 (繼承來源 Object) |
| DisposeUnlessReferenced() |
一個位元組緩衝區。 (繼承來源 JavaObject) |
| Duplicate() |
建立一個新的位元組緩衝區,共享該緩衝區的內容。 |
| Equals(Object) |
一個位元組緩衝區。 (繼承來源 JavaObject) |
| Equals(Object) |
表示是否有其他物體「等同」於此物。 (繼承來源 Object) |
| Flip() |
這會顛覆這個緩衝區。 (繼承來源 Buffer) |
| Get() |
相對 取得 方法。 |
| Get(Byte[], Int32, Int32) |
相對體積 獲得 方法。 |
| Get(Byte[]) |
相對體積 獲得 方法。 |
| Get(Int32, Byte[], Int32, Int32) |
絕對的大量 吸收 方法。 |
| Get(Int32, Byte[]) |
絕對的大量 吸收 方法。 |
| Get(Int32) |
絕對是 正確的方法 。 |
| GetChar(Int32) |
絕對 是 讀取燒焦值的方法。 |
| GetDirectBufferAddress() |
一個位元組緩衝區。 (繼承來源 Buffer) |
| GetDouble(Int32) |
絕對 是 讀取雙倍值的方法。 |
| GetFloat(Int32) |
絕對 是 讀取浮動值的方法。 |
| GetHashCode() |
回傳物件的雜湊碼值。 (繼承來源 Object) |
| GetInt(Int32) |
絕對 取得 方法來讀取int值。 |
| GetLong(Int32) |
絕對 的獲取 方法來讀取長期價值。 |
| GetShort(Int32) |
絕對 是 解讀短值的方法。 |
| JavaFinalize() |
已淘汰.
當垃圾回收判定該物件不再有相關參考時,由垃圾回收器呼叫。 (繼承來源 Object) |
| Limit() |
回傳此緩衝區的極限。 (繼承來源 Buffer) |
| Limit(Int32) |
設定這個緩衝區的極限。 (繼承來源 Buffer) |
| Mark() |
將此緩衝區的標記設定在其位置。 (繼承來源 Buffer) |
| Mismatch(ByteBuffer) |
尋找並回傳該緩衝區與某緩衝區間第一個不匹配的相對索引。 |
| Notify() |
喚醒一個正在該物件監視器上等待的執行緒。 (繼承來源 Object) |
| NotifyAll() |
喚醒所有等待該物件監視器的執行緒。 (繼承來源 Object) |
| Order() |
取得此緩衝區的位元組順序。 |
| Order(ByteOrder) |
修改此緩衝區的位元組順序。 |
| Position() |
回傳此緩衝區的位置。 (繼承來源 Buffer) |
| Position(Int32) |
設定這個緩衝區的位置。 (繼承來源 Buffer) |
| Put(Byte[], Int32, Int32) |
相對批量賣出法及nbsp; (可選操作)。 |
| Put(Byte[]) |
相對批量賣出法及nbsp; (可選操作)。 |
| Put(ByteBuffer) |
相對批量賣出法及nbsp; (可選操作)。 |
| Put(Int32, Byte[], Int32, Int32) |
絕對大量輸入法及nbsp; (可選操作)。 |
| Put(Int32, Byte[]) |
絕對大量輸入法及nbsp; (可選操作)。 |
| Put(Int32, ByteBuffer, Int32, Int32) |
絕對大量輸入法及nbsp; (可選操作)。 |
| Put(Int32, SByte) |
絕對放下方法 (可選操作)。 |
| Put(SByte) |
相對賣出法 (可選操作)。 |
| PutChar(Char) |
寫字值的相對置法 (可選操作)。 |
| PutChar(Int32, Char) |
絕對輸入法來撰寫角色值 (可選操作)。 |
| PutDouble(Double) |
撰寫雙值的相對置入方法,nbsp; (可選操作)。 |
| PutDouble(Int32, Double) |
絕對放置方法用於撰寫雙倍值 (可選操作)。 |
| PutFloat(Int32, Single) |
絕對置入法寫浮點數值 (可選操作)。 |
| PutFloat(Single) |
撰寫浮點數值的相對 put 方法 (可選操作)。 |
| PutInt(Int32, Int32) |
絕對輸入方法用於撰寫整數值 (可選操作)。 |
| PutInt(Int32) |
撰寫整數值的相對 put 方法與 nbsp; (可選操作)。 |
| PutLong(Int32, Int64) |
絕對賣出法用於撰寫多頭價值 (可選操作)。 |
| PutLong(Int64) |
寫多頭價值的相對賣出法 nbsp; (可選操作)。 |
| PutShort(Int16) |
寫短價的相對賣出法 (可選操作)。 |
| PutShort(Int32, Int16) |
絕對賣出法撰寫短期價值 (可選操作)。 |
| Remaining() |
回傳當前位置與極限之間的元素數。 (繼承來源 Buffer) |
| Reset() |
將此緩衝區的位置重設為先前標記的位置。 (繼承來源 Buffer) |
| Rewind() |
倒帶這個緩衝區。 (繼承來源 Buffer) |
| SetHandle(IntPtr, JniHandleOwnership) |
設定 Handle 屬性。 (繼承來源 Object) |
| SetPeerReference(JniObjectReference, JniObjectReferenceOptions) |
一個位元組緩衝區。 (繼承來源 JavaObject) |
| Slice() |
建立一個新的位元組緩衝區,其內容是該緩衝區內容的共享子序列。 |
| Slice(Int32, Int32) |
建立一個新的位元組緩衝區,其內容是該緩衝區內容的共享子序列。 |
| ToArray<T>() |
從這個 Java 陣列包裝器建立一個受管理陣列。 (繼承來源 Object) |
| ToString() |
回傳物件的字串表示。 (繼承來源 Object) |
| UnregisterFromRuntime() |
將此 Java 節點從互通執行時中取消註冊。 (繼承來源 Object) |
| Wait() |
導致目前執行緒等待被喚醒,通常是透過 <em>通知</><em 或 em>中斷</em> 來喚醒。 (繼承來源 Object) |
| Wait(Int64, Int32) |
會讓目前執行緒等待喚醒,通常是透過 <em>通知</><em 或 em>中斷</em>,或是經過一定的真實時間。 (繼承來源 Object) |
| Wait(Int64) |
會讓目前執行緒等待喚醒,通常是透過 <em>通知</><em 或 em>中斷</em>,或是經過一定的真實時間。 (繼承來源 Object) |
| Wrap(Byte[], Int32, Int32) |
將位元組陣列包裝成緩衝區。 |
| Wrap(Byte[]) |
將位元組陣列包裝成緩衝區。 |
明確介面實作
| 名稱 | Description |
|---|---|
| IComparable.CompareTo(Object) |
一個位元組緩衝區。 |
| IJavaPeerable.Disposed() |
一個位元組緩衝區。 (繼承來源 JavaObject) |
| IJavaPeerable.Finalized() |
一個位元組緩衝區。 (繼承來源 JavaObject) |
| IJavaPeerable.JniObjectReferenceControlBlock |
一個位元組緩衝區。 (繼承來源 JavaObject) |
| IJavaPeerable.SetJniIdentityHashCode(Int32) |
一個位元組緩衝區。 (繼承來源 JavaObject) |
| IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
一個位元組緩衝區。 (繼承來源 JavaObject) |
| IJavaPeerable.SetPeerReference(JniObjectReference) |
一個位元組緩衝區。 (繼承來源 JavaObject) |
| IJavaPeerable.UnregisterFromRuntime() |
一個位元組緩衝區。 |
擴充方法
| 名稱 | Description |
|---|---|
| GetJniTypeName(IJavaPeerable) |
取得實例 |
| JavaAs<TResult>(IJavaPeerable) |
試著強制 |
| JavaCast<TResult>(IJavaObject) |
執行 Android 執行時檢查型別轉換。 |
| JavaCast<TResult>(IJavaObject) |
一個位元組緩衝區。 |
| TryJavaCast<TResult>(IJavaPeerable, TResult) |
試著強制 |