diff options
Diffstat (limited to 'java/core/src/main/java/com/google/protobuf/UnsafeUtil.java')
-rw-r--r-- | java/core/src/main/java/com/google/protobuf/UnsafeUtil.java | 44 |
1 files changed, 7 insertions, 37 deletions
diff --git a/java/core/src/main/java/com/google/protobuf/UnsafeUtil.java b/java/core/src/main/java/com/google/protobuf/UnsafeUtil.java index c9e2904b..50bc911d 100644 --- a/java/core/src/main/java/com/google/protobuf/UnsafeUtil.java +++ b/java/core/src/main/java/com/google/protobuf/UnsafeUtil.java @@ -72,8 +72,6 @@ final class UnsafeUtil { private static final long BUFFER_ADDRESS_OFFSET = fieldOffset(bufferAddressField()); - private static final long STRING_VALUE_OFFSET = fieldOffset(stringValueField()); - private UnsafeUtil() {} static boolean hasUnsafeArrayOperations() { @@ -228,7 +226,7 @@ final class UnsafeUtil { } static void copyMemory(byte[] src, long srcIndex, byte[] target, long targetIndex, long length) { - System.arraycopy(src, (int) srcIndex, target, (int) targetIndex, (int) length); + System.arraycopy(src, (int) srcIndex, target, (int) targetIndex, (int) length); } static byte getByte(long address) { @@ -255,33 +253,11 @@ final class UnsafeUtil { MEMORY_ACCESSOR.putLong(address, value); } - /** - * Gets the offset of the {@code address} field of the given direct {@link ByteBuffer}. - */ + /** Gets the offset of the {@code address} field of the given direct {@link ByteBuffer}. */ static long addressOffset(ByteBuffer buffer) { return MEMORY_ACCESSOR.getLong(buffer, BUFFER_ADDRESS_OFFSET); } - /** - * Returns a new {@link String} backed by the given {@code chars}. The char array should not - * be mutated any more after calling this function. - */ - static String moveToString(char[] chars) { - if (STRING_VALUE_OFFSET == -1) { - // In the off-chance that this JDK does not implement String as we'd expect, just do a copy. - return new String(chars); - } - final String str; - try { - str = (String) UNSAFE.allocateInstance(String.class); - } catch (InstantiationException e) { - // This should never happen, but return a copy as a fallback just in case. - return new String(chars); - } - putObject(str, STRING_VALUE_OFFSET, chars); - return str; - } - static Object getStaticObject(Field field) { return MEMORY_ACCESSOR.getStaticObject(field); } @@ -397,12 +373,6 @@ final class UnsafeUtil { return field != null && field.getType() == long.class ? field : null; } - /** Finds the value field within a {@link String}. */ - private static Field stringValueField() { - Field field = field(String.class, "value"); - return field != null && field.getType() == char[].class ? field : null; - } - /** * Returns the offset of the provided field, or {@code -1} if {@code sun.misc.Unsafe} is not * available. @@ -500,9 +470,9 @@ final class UnsafeUtil { public abstract void putLong(long address, long value); public abstract Object getStaticObject(Field field); - + public abstract void copyMemory(long srcOffset, byte[] target, long targetIndex, long length); - + public abstract void copyMemory(byte[] src, long srcIndex, long targetOffset, long length); } @@ -581,12 +551,12 @@ final class UnsafeUtil { public void putDouble(Object target, long offset, double value) { unsafe.putDouble(target, offset, value); } - - @Override + + @Override public void copyMemory(long srcOffset, byte[] target, long targetIndex, long length) { unsafe.copyMemory(null, srcOffset, target, BYTE_ARRAY_BASE_OFFSET + targetIndex, length); } - + @Override public void copyMemory(byte[] src, long srcIndex, long targetOffset, long length) { unsafe.copyMemory(src, BYTE_ARRAY_BASE_OFFSET + srcIndex, null, targetOffset, length); |