Package com.google.protobuf
Class UnsafeUtil
java.lang.Object
com.google.protobuf.UnsafeUtil
Utility class for working with unsafe operations.
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprivate static final classprivate static final classprivate static final classprivate static class -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate static final longprivate static final longprivate static final longprivate static final int(package private) static final longprivate static final longprivate static final longprivate static final longprivate static final longprivate static final booleanprivate static final booleanprivate static final longprivate static final longprivate static final booleanprivate static final boolean(package private) static final booleanprivate static final longprivate static final longprivate static final UnsafeUtil.MemoryAccessorprivate static final Class<?>private static final longprivate static final longprivate static final intprivate static final intprivate static final sun.misc.Unsafe -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescription(package private) static longaddressOffset(ByteBuffer buffer) Gets the offset of theaddressfield of the given directByteBuffer.(package private) static <T> TallocateInstance(Class<T> clazz) private static intarrayBaseOffset(Class<?> clazz) private static intarrayIndexScale(Class<?> clazz) private static FieldFinds the address field within a directBuffer.(package private) static voidcopyMemory(byte[] src, long srcIndex, byte[] target, long targetIndex, long length) (package private) static voidcopyMemory(byte[] src, long srcIndex, long targetOffset, long length) (package private) static voidcopyMemory(long srcOffset, byte[] target, long targetIndex, long length) (package private) static booleandetermineAndroidSupportByAddressSize(Class<?> addressClass) private static FieldGets the field with the given name within the class, ornullif not found.private static longfieldOffset(Field field) Returns the offset of the provided field, or-1ifsun.misc.Unsafeis not available.private static intfirstDifferingByteIndexNativeEndian(long left, long right) Returns the index of the first byte where left and right differ, in the range [0, 8].(package private) static booleangetBoolean(boolean[] target, long index) (package private) static booleangetBoolean(Object target, long offset) private static booleangetBooleanBigEndian(Object target, long offset) private static booleangetBooleanLittleEndian(Object target, long offset) (package private) static bytegetByte(byte[] target, long index) (package private) static bytegetByte(long address) (package private) static byteprivate static bytegetByteBigEndian(Object target, long offset) private static bytegetByteLittleEndian(Object target, long offset) (package private) static doublegetDouble(double[] target, long index) (package private) static double(package private) static floatgetFloat(float[] target, long index) (package private) static float(package private) static intgetInt(int[] target, long index) (package private) static intgetInt(long address) (package private) static int(package private) static longgetLong(long address) (package private) static longgetLong(long[] target, long index) (package private) static longprivate static UnsafeUtil.MemoryAccessorGet aUnsafeUtil.MemoryAccessorappropriate for the platform, or null if not supported.(package private) static Object(package private) static Object(package private) static ObjectgetStaticObject(Field field) (package private) static sun.misc.UnsafeGets thesun.misc.Unsafeinstance, ornullif not available on this platform.(package private) static boolean(package private) static boolean(package private) static booleanprivate static void(package private) static intmismatch(byte[] left, int leftOff, byte[] right, int rightOff, int length) Returns the lowestindexsuch that0 <= index < lengthandleft[leftOff + index] != right[rightOff + index].(package private) static longobjectFieldOffset(Field field) (package private) static voidputBoolean(boolean[] target, long index, boolean value) (package private) static voidputBoolean(Object target, long offset, boolean value) private static voidputBooleanBigEndian(Object target, long offset, boolean value) private static voidputBooleanLittleEndian(Object target, long offset, boolean value) (package private) static voidputByte(byte[] target, long index, byte value) (package private) static voidputByte(long address, byte value) (package private) static voidprivate static voidputByteBigEndian(Object target, long offset, byte value) private static voidputByteLittleEndian(Object target, long offset, byte value) (package private) static voidputDouble(double[] target, long index, double value) (package private) static void(package private) static voidputFloat(float[] target, long index, float value) (package private) static void(package private) static voidputInt(int[] target, long index, int value) (package private) static voidputInt(long address, int value) (package private) static void(package private) static voidputLong(long[] target, long index, long value) (package private) static voidputLong(long address, long value) (package private) static void(package private) static void(package private) static voidprivate static booleanprivate static boolean
-
Field Details
-
UNSAFE
private static final sun.misc.Unsafe UNSAFE -
MEMORY_CLASS
-
IS_ANDROID_64
private static final boolean IS_ANDROID_64 -
IS_ANDROID_32
private static final boolean IS_ANDROID_32 -
MEMORY_ACCESSOR
-
HAS_UNSAFE_BYTEBUFFER_OPERATIONS
private static final boolean HAS_UNSAFE_BYTEBUFFER_OPERATIONS -
HAS_UNSAFE_ARRAY_OPERATIONS
private static final boolean HAS_UNSAFE_ARRAY_OPERATIONS -
BYTE_ARRAY_BASE_OFFSET
static final long BYTE_ARRAY_BASE_OFFSET -
BOOLEAN_ARRAY_BASE_OFFSET
private static final long BOOLEAN_ARRAY_BASE_OFFSET -
BOOLEAN_ARRAY_INDEX_SCALE
private static final long BOOLEAN_ARRAY_INDEX_SCALE -
INT_ARRAY_BASE_OFFSET
private static final long INT_ARRAY_BASE_OFFSET -
INT_ARRAY_INDEX_SCALE
private static final long INT_ARRAY_INDEX_SCALE -
LONG_ARRAY_BASE_OFFSET
private static final long LONG_ARRAY_BASE_OFFSET -
LONG_ARRAY_INDEX_SCALE
private static final long LONG_ARRAY_INDEX_SCALE -
FLOAT_ARRAY_BASE_OFFSET
private static final long FLOAT_ARRAY_BASE_OFFSET -
FLOAT_ARRAY_INDEX_SCALE
private static final long FLOAT_ARRAY_INDEX_SCALE -
DOUBLE_ARRAY_BASE_OFFSET
private static final long DOUBLE_ARRAY_BASE_OFFSET -
DOUBLE_ARRAY_INDEX_SCALE
private static final long DOUBLE_ARRAY_INDEX_SCALE -
OBJECT_ARRAY_BASE_OFFSET
private static final long OBJECT_ARRAY_BASE_OFFSET -
OBJECT_ARRAY_INDEX_SCALE
private static final long OBJECT_ARRAY_INDEX_SCALE -
BUFFER_ADDRESS_OFFSET
private static final long BUFFER_ADDRESS_OFFSET -
STRIDE
private static final int STRIDE- See Also:
-
STRIDE_ALIGNMENT_MASK
private static final int STRIDE_ALIGNMENT_MASK- See Also:
-
BYTE_ARRAY_ALIGNMENT
private static final int BYTE_ARRAY_ALIGNMENT -
IS_BIG_ENDIAN
static final boolean IS_BIG_ENDIAN
-
-
Constructor Details
-
UnsafeUtil
private UnsafeUtil()
-
-
Method Details
-
hasUnsafeArrayOperations
static boolean hasUnsafeArrayOperations() -
hasUnsafeByteBufferOperations
static boolean hasUnsafeByteBufferOperations() -
isAndroid64
static boolean isAndroid64() -
allocateInstance
-
objectFieldOffset
-
arrayBaseOffset
-
arrayIndexScale
-
getByte
-
putByte
-
getInt
-
putInt
-
getLong
-
putLong
-
getBoolean
-
putBoolean
-
getFloat
-
putFloat
-
getDouble
-
putDouble
-
getObject
-
putObject
-
getByte
static byte getByte(byte[] target, long index) -
putByte
static void putByte(byte[] target, long index, byte value) -
getInt
static int getInt(int[] target, long index) -
putInt
static void putInt(int[] target, long index, int value) -
getLong
static long getLong(long[] target, long index) -
putLong
static void putLong(long[] target, long index, long value) -
getBoolean
static boolean getBoolean(boolean[] target, long index) -
putBoolean
static void putBoolean(boolean[] target, long index, boolean value) -
getFloat
static float getFloat(float[] target, long index) -
putFloat
static void putFloat(float[] target, long index, float value) -
getDouble
static double getDouble(double[] target, long index) -
putDouble
static void putDouble(double[] target, long index, double value) -
getObject
-
putObject
-
copyMemory
static void copyMemory(byte[] src, long srcIndex, long targetOffset, long length) -
copyMemory
static void copyMemory(long srcOffset, byte[] target, long targetIndex, long length) -
copyMemory
static void copyMemory(byte[] src, long srcIndex, byte[] target, long targetIndex, long length) -
getByte
static byte getByte(long address) -
putByte
static void putByte(long address, byte value) -
getInt
static int getInt(long address) -
putInt
static void putInt(long address, int value) -
getLong
static long getLong(long address) -
putLong
static void putLong(long address, long value) -
addressOffset
Gets the offset of theaddressfield of the given directByteBuffer. -
getStaticObject
-
getUnsafe
static sun.misc.Unsafe getUnsafe()Gets thesun.misc.Unsafeinstance, ornullif not available on this platform. -
getMemoryAccessor
Get aUnsafeUtil.MemoryAccessorappropriate for the platform, or null if not supported. -
supportsUnsafeArrayOperations
private static boolean supportsUnsafeArrayOperations() -
supportsUnsafeByteBufferOperations
private static boolean supportsUnsafeByteBufferOperations() -
determineAndroidSupportByAddressSize
-
bufferAddressField
Finds the address field within a directBuffer. -
firstDifferingByteIndexNativeEndian
private static int firstDifferingByteIndexNativeEndian(long left, long right) Returns the index of the first byte where left and right differ, in the range [0, 8]. Ifleft == right, the result will be 8, otherwise less than 8.This counts from the *first* byte, which may be the most or least significant byte depending on the system endianness.
-
mismatch
static int mismatch(byte[] left, int leftOff, byte[] right, int rightOff, int length) Returns the lowestindexsuch that0 <= index < lengthandleft[leftOff + index] != right[rightOff + index]. If no such value exists -- ifleftandrightmatch up tolengthbytes from their respective offsets -- returns -1.leftOff + lengthmust be less than or equal toleft.length, and the same forright. -
fieldOffset
Returns the offset of the provided field, or-1ifsun.misc.Unsafeis not available. -
field
Gets the field with the given name within the class, ornullif not found. -
getByteBigEndian
-
getByteLittleEndian
-
putByteBigEndian
-
putByteLittleEndian
-
getBooleanBigEndian
-
getBooleanLittleEndian
-
putBooleanBigEndian
-
putBooleanLittleEndian
-
logMissingMethod
-