static final class Utf8.SafeProcessor extends Utf8.Processor
Utf8.Processor
implementation that does not use any sun.misc.Unsafe
methods.Constructor and Description |
---|
SafeProcessor() |
Modifier and Type | Method and Description |
---|---|
(package private) int |
encodeUtf8(java.lang.CharSequence in,
byte[] out,
int offset,
int length)
Encodes an input character sequence (
in ) to UTF-8 in the target array (out ). |
(package private) void |
encodeUtf8Direct(java.lang.CharSequence in,
java.nio.ByteBuffer out)
Encodes the input character sequence to a direct
ByteBuffer instance. |
private static int |
partialIsValidUtf8(byte[] bytes,
int index,
int limit) |
(package private) int |
partialIsValidUtf8(int state,
byte[] bytes,
int index,
int limit)
Tells whether the given byte array slice is a well-formed,
malformed, or incomplete UTF-8 byte sequence.
|
(package private) int |
partialIsValidUtf8Direct(int state,
java.nio.ByteBuffer buffer,
int index,
int limit)
Performs validation for direct
ByteBuffer instances. |
private static int |
partialIsValidUtf8NonAscii(byte[] bytes,
int index,
int limit) |
encodeUtf8, encodeUtf8Default, isValidUtf8, isValidUtf8, partialIsValidUtf8, partialIsValidUtf8Default
int partialIsValidUtf8(int state, byte[] bytes, int index, int limit)
Utf8.Processor
index
, inclusive, to
limit
, exclusive.partialIsValidUtf8
in class Utf8.Processor
state
- either Utf8.COMPLETE
(if this is the initial decoding
operation) or the value returned from a call to a partial decoding method
for the previous bytesUtf8.MALFORMED
if the partial byte sequence is
definitely not well-formed, Utf8.COMPLETE
if it is well-formed
(no additional input needed), or if the byte sequence is
"incomplete", i.e. apparently terminated in the middle of a character,
an opaque integer "state" value containing enough information to
decode the character when passed to a subsequent invocation of a
partial decoding method.int partialIsValidUtf8Direct(int state, java.nio.ByteBuffer buffer, int index, int limit)
Utf8.Processor
ByteBuffer
instances.partialIsValidUtf8Direct
in class Utf8.Processor
int encodeUtf8(java.lang.CharSequence in, byte[] out, int offset, int length)
Utf8.Processor
in
) to UTF-8 in the target array (out
).
For a string, this method is similar to
byte[] a = string.getBytes(UTF_8);
System.arraycopy(a, 0, bytes, offset, a.length);
return offset + a.length;
but is more efficient in both time and space. One key difference is that this method
requires paired surrogates, and therefore does not support chunking.
While String.getBytes(UTF_8)
replaces unpaired surrogates with the default
replacement character, this method throws Utf8.UnpairedSurrogateException
.
To ensure sufficient space in the output buffer, either call Utf8.encodedLength(java.lang.CharSequence)
to
compute the exact amount needed, or leave room for
Utf8.MAX_BYTES_PER_CHAR * sequence.length()
, which is the largest possible number
of bytes that any input can be encoded to.
encodeUtf8
in class Utf8.Processor
in
- the input character sequence to be encodedout
- the target arrayoffset
- the starting offset in bytes
to start writing atlength
- the length of the bytes
, starting from offset
offset + Utf8.encodedLength(sequence)
void encodeUtf8Direct(java.lang.CharSequence in, java.nio.ByteBuffer out)
Utf8.Processor
ByteBuffer
instance.encodeUtf8Direct
in class Utf8.Processor
private static int partialIsValidUtf8(byte[] bytes, int index, int limit)
private static int partialIsValidUtf8NonAscii(byte[] bytes, int index, int limit)