MethodHandles.ByteBufferViewVarHandle(Class, ByteOrder) Metodo
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Produce un valore VarHandle che concede l'accesso agli elementi di un oggetto ByteBuffer visualizzato come se fosse una matrice di elementi di un tipo di componente primitivo diverso a quello di byte, ad esempio int[] o long[].
[Android.Runtime.Register("byteBufferViewVarHandle", "(Ljava/lang/Class;Ljava/nio/ByteOrder;)Ljava/lang/invoke/VarHandle;", "", ApiSince=33)]
public static Java.Lang.Invoke.VarHandle? ByteBufferViewVarHandle(Java.Lang.Class? viewArrayClass, Java.Nio.ByteOrder? byteOrder);
[<Android.Runtime.Register("byteBufferViewVarHandle", "(Ljava/lang/Class;Ljava/nio/ByteOrder;)Ljava/lang/invoke/VarHandle;", "", ApiSince=33)>]
static member ByteBufferViewVarHandle : Java.Lang.Class * Java.Nio.ByteOrder -> Java.Lang.Invoke.VarHandle
Parametri
- viewArrayClass
- Class
classe della matrice di visualizzazione, con un tipo di componente di tipo T
- byteOrder
- ByteOrder
endianness degli elementi della matrice di viste, come archiviato nell'oggetto sottostante ByteBuffer (si noti che esegue l'override dell'endianità di un oggetto ByteBuffer)
Valori restituiti
Un oggetto VarHandle che concede l'accesso agli elementi di un oggetto ByteBuffer visualizzato come se gli elementi corrispondenti al tipo di componenti della classe della matrice di visualizzazione
- Attributi
Commenti
Produce un valore VarHandle che concede l'accesso agli elementi di un oggetto ByteBuffer visualizzato come se fosse una matrice di elementi di un tipo di componente primitivo diverso a quello di byte, ad esempio int[] o long[]. Il tipo di variabile di VarHandle è il tipo di componente di viewArrayClass e l'elenco dei tipi di coordinate è (ByteBuffer, int), dove il int tipo di coordinata corrisponde a un argomento che è un indice in una byte[] matrice. L'oggetto VarHandle restituito accede ai byte in corrispondenza di un indice in un ByteBufferoggetto , componendo byte a o da un valore del tipo di componente di viewArrayClass in base alla endianità specificata.
I tipi di componente supportati (tipi di variabili) sono short, , charint, longfloat e double.
L'accesso genererà un oggetto ReadOnlyBufferException per qualsiasi elemento diverso dalle modalità di accesso in lettura se è ByteBuffer di sola lettura.
L'accesso dei byte in un determinato indice genererà IndexOutOfBoundsException se l'indice è minore 0 o maggiore del ByteBuffer limite meno le dimensioni (in byte) di T.
L'accesso dei byte in un indice può essere allineato o non allineato per T, in relazione all'indirizzo di memoria sottostante, A ad esempio, associato all'indice ByteBuffer e . Se l'accesso non è allineato correttamente, l'accesso per qualsiasi elemento diverso dalle get modalità di accesso e set genererà un oggetto IllegalStateException. In questi casi, l'accesso atomico è garantito solo rispetto alla potenza massima di due che divide il GCD di A e le dimensioni (in byte) di T. Se l'accesso è allineato, sono supportate le modalità di accesso seguenti e sono garantite il supporto dell'accesso atomico: <ul<>li>read write access mode for all T, ad eccezione delle modalità get di accesso e per long e doubleset nelle piattaforme a 32 bit.
<li>atomic update access mode for int, longo floatdouble. Le future versioni principali della piattaforma JDK potrebbero supportare tipi aggiuntivi per determinate modalità di accesso attualmente non supportate. <li>numeric atomic update access mode for int e long. Le future versioni principali della piattaforma JDK potrebbero supportare tipi numerici aggiuntivi per determinate modalità di accesso attualmente non supportate. <li>bitwise atomic update access mode for int e long. Le future versioni principali della piattaforma JDK potrebbero supportare tipi numerici aggiuntivi per determinate modalità di accesso attualmente non supportate. </ul>
L'accesso non allineato e pertanto le garanzie di atomicità possono essere determinate per un ByteBufferoggetto , bb (diretto o diverso), un oggetto ed è il indexT tipo boxed corrispondente, , , T_BOXcome indicato di seguito:
{@code
int sizeOfT = T_BOX.BYTES; // size in bytes of T
ByteBuffer bb = ...
int misalignedAtIndex = bb.alignmentOffset(index, sizeOfT);
boolean isMisaligned = misalignedAtIndex != 0;
}
Se il tipo di variabile è float o double quindi le modalità di accesso agli aggiornamenti atomici confrontano i valori usando la relativa rappresentazione bit per bit (vedere Float#floatToRawIntBits rispettivamente e Double#doubleToRawLongBits).
Aggiunta in 9.
Le parti di questa pagina sono modifiche basate sul lavoro creato e condiviso dal progetto Open Source Android e usato in base ai termini descritti nella licenza Creative Commons 2.5 Attribuzione.