Class Utf8.UnsafeProcessor
java.lang.Object
com.google.protobuf.Utf8.Processor
com.google.protobuf.Utf8.UnsafeProcessor
- Enclosing class:
Utf8
Utf8.Processor that uses sun.misc.Unsafe where possible to improve performance.-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescription(package private) StringdecodeUtf8(byte[] bytes, int index, int size) Decodes the given byte array slice into aString.(package private) StringdecodeUtf8Direct(ByteBuffer buffer, int index, int size) Decodes directByteBufferinstances intoString.(package private) intencodeUtf8(String in, byte[] out, int offset, int length) Encodes an input character sequence (in) to UTF-8 in the target array (out).protected voidencodeUtf8Internal(String in, ByteBuffer out) Encodes the input character sequence to a directByteBufferinstance.(package private) static booleanIndicates whether or not all required unsafe operations are supported on this platform.booleanisValidUtf8(byte[] bytes, int index, int limit) Returnstrueif the given byte array slice is a well-formed UTF-8 byte sequence.protected booleanisValidUtf8BufferDirect(ByteBuffer buffer, int index, int limit) Must only be called on Direct buffers.private static intunsafeEstimateConsecutiveAscii(byte[] bytes, long offset, int maxChars) Counts (approximately) the number of consecutive ASCII characters starting from the given position, using the most efficient method available to the platform.private static intunsafeEstimateConsecutiveAscii(long address, int maxChars) Same asUtf8.estimateConsecutiveAscii(ByteBuffer, int, int)except that it uses the most efficient method available to the platform.Methods inherited from class Utf8.Processor
decodeUtf8, decodeUtf8Default, encodeUtf8, encodeUtf8Naive, encodeUtf8Naive, isValidUtf8BufferDefault
-
Constructor Details
-
UnsafeProcessor
UnsafeProcessor()
-
-
Method Details
-
isAvailable
static boolean isAvailable()Indicates whether or not all required unsafe operations are supported on this platform. -
isValidUtf8
public boolean isValidUtf8(byte[] bytes, int index, int limit) Description copied from class:Utf8.ProcessorReturnstrueif the given byte array slice is a well-formed UTF-8 byte sequence. The range of bytes to be checked extends from indexindex, inclusive, tolimit, exclusive.- Specified by:
isValidUtf8in classUtf8.Processor
-
isValidUtf8BufferDirect
Description copied from class:Utf8.ProcessorMust only be called on Direct buffers. This exists as a separate method only so that the UnsafeProcessor can optimize specially for that case.- Overrides:
isValidUtf8BufferDirectin classUtf8.Processor
-
decodeUtf8
Description copied from class:Utf8.ProcessorDecodes the given byte array slice into aString.- Specified by:
decodeUtf8in classUtf8.Processor- Throws:
InvalidProtocolBufferException- if the byte array slice is not valid UTF-8
-
decodeUtf8Direct
String decodeUtf8Direct(ByteBuffer buffer, int index, int size) throws InvalidProtocolBufferException Description copied from class:Utf8.ProcessorDecodes directByteBufferinstances intoString.- Specified by:
decodeUtf8Directin classUtf8.Processor- Throws:
InvalidProtocolBufferException
-
encodeUtf8
Description copied from class:Utf8.ProcessorEncodes an input character sequence (in) to UTF-8 in the target array (out). For a string, this method is functionally identical to
but may be implemented differently for efficiency purposes.byte[] a = string.getBytes(UTF_8); System.arraycopy(a, 0, bytes, offset, a.length); return offset + a.length;Matching
String.getBytes(UTF_8)this replaces unpaired surrogates with a replacement character.To ensure sufficient space in the output buffer, either call
Utf8.encodedLength(String)to compute the exact amount needed, or leave room forUtf8.MAX_BYTES_PER_CHAR * sequence.length(), which is the largest possible number of bytes that any input can be encoded to.- Specified by:
encodeUtf8in classUtf8.Processor- Parameters:
in- the input character sequence to be encodedout- the target arrayoffset- the starting offset inbytesto start writing atlength- the length of thebytes, starting fromoffset- Returns:
- the new offset, equivalent to
offset + Utf8.encodedLength(sequence)
-
encodeUtf8Internal
Description copied from class:Utf8.ProcessorEncodes the input character sequence to a directByteBufferinstance.- Specified by:
encodeUtf8Internalin classUtf8.Processor
-
unsafeEstimateConsecutiveAscii
private static int unsafeEstimateConsecutiveAscii(byte[] bytes, long offset, int maxChars) Counts (approximately) the number of consecutive ASCII characters starting from the given position, using the most efficient method available to the platform.- Parameters:
bytes- the array containing the character sequenceoffset- the offset position of the index (same as index + arrayBaseOffset)maxChars- the maximum number of characters to count- Returns:
- the number of ASCII characters found. The stopping position will be at or before the first non-ASCII byte.
-
unsafeEstimateConsecutiveAscii
private static int unsafeEstimateConsecutiveAscii(long address, int maxChars) Same asUtf8.estimateConsecutiveAscii(ByteBuffer, int, int)except that it uses the most efficient method available to the platform.
-