共用方式為


ByteBuffer 類別

定義

位元組緩衝區。

[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
繼承
ByteBuffer
衍生
屬性
實作

備註

位元組緩衝區。

此類別會在位元組緩衝區上定義六種作業類別:

<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為 。

若要存取異質二進位數據,也就是不同類型的值序列,這個類別會定義每個型別的絕對和相對 getput 方法系列。 例如,針對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>

對應方法會針對 、、、intlongdouble類型charshort定義。 絕對 getput 方法的索引參數是以位元組為單位,而不是讀取或寫入的類型。

“views”>

為了存取同質二進位數據,也就是相同類型的值序列,這個類別會定義可建立 指定位元組緩衝區檢視 的方法。 檢視緩衝區只是另一個緩衝區,其內容是由位元組緩衝區支援。 位元組緩衝區內容的變更將會顯示在檢視緩衝區中,反之亦然:兩個緩衝區的位置、限制和標記值都是獨立的。 例如,方法 #asFloatBuffer() asFloatBuffer 會建立 類別的 FloatBuffer 實例,這個實例是由叫用 方法的位元組緩衝區所支援。 針對、、shortlongintdouble類型char定義對應的檢視建立方法。

檢視緩衝區在類型特定 getput 方法系列上具有三個重要優點:

<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中新增。

java.nio.ByteBufferJava 檔。

此頁面的部分是根據 Android 開放原始碼專案所建立和共用的工作進行修改,並根據 Creative Commons 2.5 屬性授權中所述的詞彙使用。

建構函式

ByteBuffer(IntPtr, JniHandleOwnership)

建立 JNI 物件的 Managed 表示法時使用的建構函式;由運行時間呼叫。

屬性

Char

傳回目前位置的 char,並將位置增加 2。

Class

傳回這個 Object的運行時間類別。

(繼承來源 Object)
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)

位元組緩衝區。

適用於