MethodHandles.ByteArrayViewVarHandle(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 una byte[] matrice visualizzata come se fosse un tipo di matrice primitiva diverso, ad esempio int[] o long[].
[Android.Runtime.Register("byteArrayViewVarHandle", "(Ljava/lang/Class;Ljava/nio/ByteOrder;)Ljava/lang/invoke/VarHandle;", "", ApiSince=33)]
public static Java.Lang.Invoke.VarHandle? ByteArrayViewVarHandle(Java.Lang.Class? viewArrayClass, Java.Nio.ByteOrder? byteOrder);
[<Android.Runtime.Register("byteArrayViewVarHandle", "(Ljava/lang/Class;Ljava/nio/ByteOrder;)Ljava/lang/invoke/VarHandle;", "", ApiSince=33)>]
static member ByteArrayViewVarHandle : 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 visualizzazione, come archiviato nella matrice sottostante byte
Valori restituiti
VarHandle che concede l'accesso agli elementi di una byte[] matrice visualizzati come se gli elementi corrispondenti al tipo di componenti della classe della matrice di viste
- Attributi
Commenti
Produce un valore VarHandle che concede l'accesso agli elementi di una byte[] matrice visualizzata come se fosse un tipo di matrice primitiva diverso, ad esempio int[] o long[]. Il tipo di variabile di VarHandle è il tipo di componente di viewArrayClass e l'elenco dei tipi di coordinate è (byte[], 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 una byte[] matrice, 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 dei byte in un determinato indice genererà se IndexOutOfBoundsException l'indice è minore 0 o maggiore della lunghezza della byte[] matrice meno le dimensioni in byte di T.
L'accesso dei byte a un indice può essere allineato o non allineato per T, rispetto all'indirizzo di memoria sottostante, A ad esempio, associato alla matrice e all'indice. 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 byte[] le matrici senza operare su una matrice specifica. Dato un indexT oggetto , ed è il tipo boxed corrispondente, T_BOX, il disallineamento può essere determinato nel modo seguente:
{@code
int sizeOfT = T_BOX.BYTES; // size in bytes of T
int misalignedAtZeroIndex = ByteBuffer.wrap(new byte[0]).
alignmentOffset(0, sizeOfT);
int misalignedAtIndex = (misalignedAtZeroIndex + 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.