ByteBuffer 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
位元組緩衝區。
[Android.Runtime.Register("java/nio/ByteBuffer", DoNotGenerateAcw=true)]
public abstract class ByteBuffer : Java.Nio.Buffer, IDisposable, Java.Interop.IJavaPeerable, 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
、 #duplicate duplicating
和 #slice slicing
位元組緩衝區的方法。
</李>
</ul>
您可以透過 #allocate <i>allocation</i>
建立位元組緩衝區,為緩衝區配置空間
內容,或由 #wrap(byte[]) <i>wrapping</i>
現有的位元組數位組放入緩衝區。
“direct”><h2> Direct 與 非直接緩衝區 </h2>
位元組緩衝區為 直接 或 非直接。 假設有直接位元組緩衝區,Java 虛擬機會盡最大努力直接在它上執行原生 I/O 作業。 也就是說,它會嘗試避免在基礎操作系統的其中一個原生 I/O 作業之前(或之後)將緩衝區的內容複製到(或從中複製)中繼緩衝區。
叫用 #allocateDirect(int) allocateDirect
這個類別的 Factory 方法,即可建立直接位元組緩衝區。 此方法傳回的緩衝區通常比非直接緩衝區的配置和解除分配成本要高一些。 直接緩衝區的內容可能位於一般垃圾收集堆積之外,因此對應用程式記憶體使用量的影響可能並不明顯。 因此,建議將直接緩衝區主要配置給受基礎系統原生 I/O 作業約束的大型長時間存留緩衝區。 一般而言,只有當直接緩衝區在程式效能中產生可測量的收益時,才最好配置直接緩衝區。
直接位元組緩衝區也可以由 java.nio.channels.FileChannel#map mapping
檔案的區域直接建立到記憶體中。 Java 平台的實作可以選擇性地支援透過 JNI 從原生程式代碼建立直接位元組緩衝區。 如果這類緩衝區的其中一個實例是指無法存取的記憶體區域,則嘗試存取該區域不會變更緩衝區的內容,而且會導致在存取時或稍後擲回未指定的例外狀況。
位元組緩衝區是直接或非直接,都可以藉由叫用其 #isDirect isDirect
方法來決定。 提供這個方法,讓明確的緩衝區管理可以在效能關鍵程序代碼中完成。
“bin”><h2> 存取二進位數據 </h2>
這個類別會定義讀取和寫入所有其他基本類型之值的方法,但 除外 boolean
。 基本值會根據緩衝區目前的位元組順序,轉譯成位元組序列,而這個順序可能透過 #order order
方法擷取和修改。 特定位元組順序是由 類別的 ByteOrder
實例表示。 位元組緩衝區的初始順序一律 ByteOrder#BIG_ENDIAN BIG_ENDIAN
為 。
若要存取異質二進位數據,也就是不同類型的值序列,這個類別會定義每個型別的絕對和相對 get 和 put 方法系列。 例如,針對32位浮點值,這個類別會定義:
<blockquote>
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)}
</blockquote>
對應方法會針對 、、、int
long
和double
類型char
short
定義。 絕對 get 和 put 方法的索引參數是以位元組為單位,而不是讀取或寫入的類型。
“views”>
為了存取同質二進位數據,也就是相同類型的值序列,這個類別會定義可建立 指定位元組緩衝區檢視 的方法。 檢視緩衝區只是另一個緩衝區,其內容是由位元組緩衝區支援。 位元組緩衝區內容的變更將會顯示在檢視緩衝區中,反之亦然:兩個緩衝區的位置、限制和標記值都是獨立的。 例如,方法 #asFloatBuffer() asFloatBuffer
會建立 類別的 FloatBuffer
實例,這個實例是由叫用 方法的位元組緩衝區所支援。 針對、、short
、 long
int
和double
類型char
定義對應的檢視建立方法。
檢視緩衝區在類型特定 get 和 put 方法系列上具有三個重要優點:
<ul>
<李>
檢視緩衝區的索引不是以位元組來編製索引,而是以其值的類型特定大小來編製索引;
</李>
<李>
檢視緩衝區提供相對大量取得和放置方法,這些方法可以在緩衝區與陣列或相同型別的一些其他緩衝區之間傳輸連續值序列;以及
</李>
<李>
檢視緩衝區可能更有效率,因為只有在其備份位元組緩衝區是直接時,才會直接使用檢視緩衝區。
</李>
</ul>
檢視緩衝區的位元組順序會固定為檢視建立時其位元組緩衝區的位元組順序。
<h2> 調用鏈結 </h2>
這個類別中沒有要傳回值的方法會指定,以傳回叫用它們的緩衝區。 這可讓方法調用鏈結。
語句序列
<blockquote>
bb.putInt(0xCAFEBABE);
bb.putShort(3);
bb.putShort(45);
</blockquote>
例如,可以取代為單一語句
<blockquote>
bb.putInt(0xCAFEBABE).putShort(3).putShort(45);
</blockquote>
已在1.4中新增。
此頁面的部分是根據 Android 開放原始碼專案所建立和共用的工作進行修改,並根據 Creative Commons 2.5 屬性授權中所述的詞彙使用。
建構函式
ByteBuffer(IntPtr, JniHandleOwnership) |
建立 JNI 物件的 Managed 表示法時使用的建構函式;由運行時間呼叫。 |
屬性
Char |
傳回目前位置的 char,並將位置增加 2。 |
Class |
傳回這個 |
Double |
傳回目前位置的雙精度浮點數,並將位置增加 8。 |
Float |
傳回目前位置的浮點數,並將位置增加 4。 |
Handle |
基礎Android實例的句柄。 (繼承來源 Object) |
HasArray |
指出這個緩衝區是否由可存取的位元組數位的支援。 |
HasRemaining |
指出目前位置與限制之間是否有任何專案。 (繼承來源 Buffer) |
Int |
傳回位於目前位置的 int,並將位置增加 4。 |
IsDirect |
如果這是直接緩衝區,則傳回 true。 (繼承來源 Buffer) |
IsReadOnly |
指出這個緩衝區是否為唯讀。 (繼承來源 Buffer) |
JniIdentityHashCode |
位元組緩衝區。 (繼承來源 Object) |
JniPeerMembers |
位元組緩衝區。 |
Long |
傳回目前位置的long,並將位置增加8。 |
PeerReference |
位元組緩衝區。 (繼承來源 Object) |
Short |
傳回目前位置的短線,並將位置增加 2。 |
ThresholdClass |
此 API 支援適用於 Android 的 Mono 基礎結構,並不適合直接從您的程式代碼使用。 |
ThresholdType |
此 API 支援適用於 Android 的 Mono 基礎結構,並不適合直接從您的程式代碼使用。 |
方法
AlignedSlice(Int32) |
建立新的位元組緩衝區,其內容是這個緩衝區內容的共用和對齊子序列。 |
AlignmentOffset(Int32, Int32) |
傳回記憶體位址,指向指定索引處的位元組,將指定的單位大小模數。 |
Allocate(Int32) |
配置新的位元組緩衝區。 |
AllocateDirect(Int32) |
配置新的直接位元組緩衝區。 |
ArrayOffset() |
傳回緩衝區第一個元素之緩衝區備份陣列內的位移 (選擇性作業)。 |
AsCharBuffer() |
建立這個位元組緩衝區的檢視做為char緩衝區。 |
AsDoubleBuffer() |
建立這個位元組緩衝區的檢視做為雙重緩衝區。 |
AsFloatBuffer() |
建立這個位元組緩衝區的檢視做為浮點緩衝區。 |
AsIntBuffer() |
建立這個位元組緩衝區的檢視做為int緩衝區。 |
AsLongBuffer() |
建立這個位元組緩衝區的檢視做為長緩衝區。 |
AsReadOnlyBuffer() |
建立共用此緩衝區內容的新只讀位元節緩衝區。 |
AsShortBuffer() |
建立這個位元組緩衝區的檢視做為簡短緩衝區。 |
Capacity() |
傳回這個緩衝區的容量。 (繼承來源 Buffer) |
Clear() |
清除此緩衝區。 (繼承來源 Buffer) |
Clone() |
建立並傳回這個 對象的複本。 (繼承來源 Object) |
Compact() |
壓縮此緩衝區 (選擇性作業)。 |
CompareTo(ByteBuffer) |
比較這個緩衝區與另一個緩衝區。 |
Dispose() |
位元組緩衝區。 (繼承來源 Object) |
Dispose(Boolean) |
位元組緩衝區。 (繼承來源 Object) |
Duplicate() |
建立共用此緩衝區內容的新位元組緩衝區。 |
Equals(Object) |
指出其他物件是否「等於」這個物件。 (繼承來源 Object) |
Flip() |
翻轉這個緩衝區。 (繼承來源 Buffer) |
Get() |
相對 get 方法。 |
Get(Byte[]) |
相對大量 取得 方法。 |
Get(Byte[], Int32, Int32) |
相對大量 取得 方法。 |
Get(Int32) |
Absolute get 方法。 |
GetChar(Int32) |
絕對 get 方法來讀取 char 值。 |
GetDirectBufferAddress() |
位元組緩衝區。 (繼承來源 Buffer) |
GetDouble(Int32) |
絕對 get 方法來讀取雙精度浮點數。 |
GetFloat(Int32) |
用於讀取浮點數的絕對 get 方法。 |
GetHashCode() |
傳回此物件的雜湊碼值。 (繼承來源 Object) |
GetInt(Int32) |
絕對 get 方法來讀取 int 值。 |
GetLong(Int32) |
讀取 long 值的絕對 get 方法。 |
GetShort(Int32) |
絕對 get 方法來讀取簡短值。 |
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[]) |
相對大量 放置 方法 (選擇性作業)。 |
Put(Byte[], Int32, Int32) |
相對大量 放置 方法 (選擇性作業)。 |
Put(ByteBuffer) |
相對大量 放置 方法 (選擇性作業)。 |
Put(Int32, SByte) |
絕對 put 方法 (選擇性作業)。 |
Put(SByte) |
相對 put 方法 (選擇性作業)。 |
PutChar(Char) |
用於撰寫 char 值的相對 put 方法 (選擇性作業)。 |
PutChar(Int32, Char) |
撰寫 char value 的絕對 put 方法; (選擇性作業)。 |
PutDouble(Double) |
用於撰寫雙精度浮點數的相對 put 方法 (選擇性作業)。 |
PutDouble(Int32, Double) |
寫入雙精度浮點數的絕對 put 方法 (選擇性作業)。 |
PutFloat(Int32, Single) |
撰寫浮點數的絕對 put 方法 (選擇性作業)。 |
PutFloat(Single) |
用於撰寫浮點數的相對 put 方法 (選擇性作業)。 |
PutInt(Int32) |
用於撰寫 int value 的相對 put 方法; (選擇性作業)。 |
PutInt(Int32, Int32) |
撰寫 int value 的絕對 put 方法; (選擇性作業)。 |
PutLong(Int32, Int64) |
撰寫 long value 的絕對 put 方法; (選擇性作業)。 |
PutLong(Int64) |
用於撰寫 long value 的相對 put 方法; (選擇性作業)。 |
PutShort(Int16) |
用於撰寫簡短值的相對 put 方法 (選擇性作業)。 |
PutShort(Int32, Int16) |
撰寫簡短值的絕對 put 方法 (選擇性作業)。 |
Remaining() |
傳回目前位置與限制之間的項目數目。 (繼承來源 Buffer) |
Reset() |
將此緩衝區的位置重設為先前標示的位置。 (繼承來源 Buffer) |
Rewind() |
倒轉此緩衝區。 (繼承來源 Buffer) |
SetHandle(IntPtr, JniHandleOwnership) |
設定 Handle 屬性。 (繼承來源 Object) |
Slice() |
建立新的位元組緩衝區,其內容是這個緩衝區內容的共用子序列。 |
Slice(Int32, Int32) |
建立新的位元組緩衝區,其內容是這個緩衝區內容的共用子序列。 |
Slice(Int32, Int32) |
建立新的緩衝區,其內容是這個緩衝區內容的共用子序列。 (繼承來源 Buffer) |
ToArray<T>() |
位元組緩衝區。 (繼承來源 Object) |
ToString() |
傳回物件的字串表示。 (繼承來源 Object) |
UnregisterFromRuntime() |
位元組緩衝區。 (繼承來源 Object) |
Wait() |
讓目前線程等候直到喚醒為止,通常是藉由em <notified/em>或<em>interrupted</em> 來喚醒它。<> (繼承來源 Object) |
Wait(Int64) |
讓目前的線程等到喚醒為止,通常是因為 <em>notified</em> 或 <em>interrupted</em>,或直到經過一定數量的實時為止。 (繼承來源 Object) |
Wait(Int64, Int32) |
讓目前的線程等到喚醒為止,通常是因為 <em>notified</em> 或 <em>interrupted</em>,或直到經過一定數量的實時為止。 (繼承來源 Object) |
Wrap(Byte[]) |
將位元組陣列包裝至緩衝區。 |
Wrap(Byte[], Int32, Int32) |
將位元組陣列包裝至緩衝區。 |
明確介面實作
IComparable.CompareTo(Object) |
位元組緩衝區。 |
IJavaPeerable.Disposed() |
位元組緩衝區。 (繼承來源 Object) |
IJavaPeerable.DisposeUnlessReferenced() |
位元組緩衝區。 (繼承來源 Object) |
IJavaPeerable.Finalized() |
位元組緩衝區。 (繼承來源 Object) |
IJavaPeerable.JniManagedPeerState |
位元組緩衝區。 (繼承來源 Object) |
IJavaPeerable.SetJniIdentityHashCode(Int32) |
位元組緩衝區。 (繼承來源 Object) |
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
位元組緩衝區。 (繼承來源 Object) |
IJavaPeerable.SetPeerReference(JniObjectReference) |
位元組緩衝區。 (繼承來源 Object) |
擴充方法
JavaCast<TResult>(IJavaObject) |
執行 Android 執行時間檢查的類型轉換。 |
JavaCast<TResult>(IJavaObject) |
位元組緩衝區。 |
GetJniTypeName(IJavaPeerable) |
位元組緩衝區。 |