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 class
private static final class
private static final class
private static class
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate static final long
private static final long
private static final long
private static final int
(package private) static final long
private static final long
private static final long
private static final long
private static final long
private static final boolean
private static final boolean
private static final long
private static final long
private static final boolean
private static final boolean
(package private) static final boolean
private static final long
private static final long
private static final UnsafeUtil.MemoryAccessor
private static final Class
<?> private static final long
private static final long
private static final int
private static final int
private static final sun.misc.Unsafe
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescription(package private) static long
addressOffset
(ByteBuffer buffer) Gets the offset of theaddress
field of the given directByteBuffer
.(package private) static <T> T
allocateInstance
(Class<T> clazz) private static int
arrayBaseOffset
(Class<?> clazz) private static int
arrayIndexScale
(Class<?> clazz) private static Field
Finds the address field within a directBuffer
.(package private) static void
copyMemory
(byte[] src, long srcIndex, byte[] target, long targetIndex, long length) (package private) static void
copyMemory
(byte[] src, long srcIndex, long targetOffset, long length) (package private) static void
copyMemory
(long srcOffset, byte[] target, long targetIndex, long length) (package private) static boolean
determineAndroidSupportByAddressSize
(Class<?> addressClass) private static Field
Gets the field with the given name within the class, ornull
if not found.private static long
fieldOffset
(Field field) Returns the offset of the provided field, or-1
ifsun.misc.Unsafe
is not available.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].(package private) static boolean
getBoolean
(boolean[] target, long index) (package private) static boolean
getBoolean
(Object target, long offset) private static boolean
getBooleanBigEndian
(Object target, long offset) private static boolean
getBooleanLittleEndian
(Object target, long offset) (package private) static byte
getByte
(byte[] target, long index) (package private) static byte
getByte
(long address) (package private) static byte
private static byte
getByteBigEndian
(Object target, long offset) private static byte
getByteLittleEndian
(Object target, long offset) (package private) static double
getDouble
(double[] target, long index) (package private) static double
(package private) static float
getFloat
(float[] target, long index) (package private) static float
(package private) static int
getInt
(int[] target, long index) (package private) static int
getInt
(long address) (package private) static int
(package private) static long
getLong
(long address) (package private) static long
getLong
(long[] target, long index) (package private) static long
private static UnsafeUtil.MemoryAccessor
Get aUnsafeUtil.MemoryAccessor
appropriate for the platform, or null if not supported.(package private) static Object
(package private) static Object
(package private) static Object
getStaticObject
(Field field) (package private) static sun.misc.Unsafe
Gets thesun.misc.Unsafe
instance, ornull
if not available on this platform.(package private) static boolean
(package private) static boolean
(package private) static boolean
private static void
(package private) static int
mismatch
(byte[] left, int leftOff, byte[] right, int rightOff, int length) Returns the lowestindex
such that0 <= index < length
andleft[leftOff + index] != right[rightOff + index]
.(package private) static long
objectFieldOffset
(Field field) (package private) static void
putBoolean
(boolean[] target, long index, boolean value) (package private) static void
putBoolean
(Object target, long offset, boolean value) private static void
putBooleanBigEndian
(Object target, long offset, boolean value) private static void
putBooleanLittleEndian
(Object target, long offset, boolean value) (package private) static void
putByte
(byte[] target, long index, byte value) (package private) static void
putByte
(long address, byte value) (package private) static void
private static void
putByteBigEndian
(Object target, long offset, byte value) private static void
putByteLittleEndian
(Object target, long offset, byte value) (package private) static void
putDouble
(double[] target, long index, double value) (package private) static void
(package private) static void
putFloat
(float[] target, long index, float value) (package private) static void
(package private) static void
putInt
(int[] target, long index, int value) (package private) static void
putInt
(long address, int value) (package private) static void
(package private) static void
putLong
(long[] target, long index, long value) (package private) static void
putLong
(long address, long value) (package private) static void
(package private) static void
(package private) static void
private static boolean
private 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 theaddress
field of the given directByteBuffer
. -
getStaticObject
-
getUnsafe
static sun.misc.Unsafe getUnsafe()Gets thesun.misc.Unsafe
instance, ornull
if not available on this platform. -
getMemoryAccessor
Get aUnsafeUtil.MemoryAccessor
appropriate 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 lowestindex
such that0 <= index < length
andleft[leftOff + index] != right[rightOff + index]
. If no such value exists -- ifleft
andright
match up tolength
bytes from their respective offsets -- returns -1.leftOff + length
must be less than or equal toleft.length
, and the same forright
. -
fieldOffset
Returns the offset of the provided field, or-1
ifsun.misc.Unsafe
is not available. -
field
Gets the field with the given name within the class, ornull
if not found. -
getByteBigEndian
-
getByteLittleEndian
-
putByteBigEndian
-
putByteLittleEndian
-
getBooleanBigEndian
-
getBooleanLittleEndian
-
putBooleanBigEndian
-
putBooleanLittleEndian
-
logMissingMethod
-