Lingua

MethodHandles.ByteArrayViewVarHandle(Class, ByteOrder) Metodo

Definizione

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.

Documentazione java per java.lang.invoke.MethodHandles.byteArrayViewVarHandle(java.lang.Class<?>, java.nio.ByteOrder).

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.

Si applica a