Class ByteString.LiteralByteString
- java.lang.Object
-
- com.google.protobuf.ByteString
-
- com.google.protobuf.ByteString.LeafByteString
-
- com.google.protobuf.ByteString.LiteralByteString
-
- All Implemented Interfaces:
java.io.Serializable,java.lang.Iterable<java.lang.Byte>
- Direct Known Subclasses:
ByteString.BoundedByteString
- Enclosing class:
- ByteString
private static class ByteString.LiteralByteString extends ByteString.LeafByteString
This class implements aByteStringbacked by a single array of bytes, contiguous in memory. It supports substring by pointing to only a sub-range of the underlying byte array, meaning that a substring will reference the full byte-array of the string it's made from, exactly as withString.
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from class com.google.protobuf.ByteString
ByteString.AbstractByteIterator, ByteString.ByteIterator, ByteString.CodedBuilder, ByteString.LeafByteString, ByteString.Output
-
-
Field Summary
Fields Modifier and Type Field Description protected byte[]bytesprivate static longserialVersionUID-
Fields inherited from class com.google.protobuf.ByteString
CONCATENATE_BY_COPY_SIZE, EMPTY, MAX_READ_FROM_CHUNK_SIZE, MIN_READ_FROM_CHUNK_SIZE
-
-
Constructor Summary
Constructors Constructor Description LiteralByteString(byte[] bytes)Creates aLiteralByteStringbacked by the given array, without copying.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description java.nio.ByteBufferasReadOnlyByteBuffer()Constructs a read-onlyjava.nio.ByteBufferwhose content is equal to the contents of this byte string.java.util.List<java.nio.ByteBuffer>asReadOnlyByteBufferList()Constructs a list of read-onlyjava.nio.ByteBufferobjects such that the concatenation of their contents is equal to the contents of this byte string.bytebyteAt(int index)Gets the byte at the given index.voidcopyTo(java.nio.ByteBuffer target)Copies bytes into a ByteBuffer.protected voidcopyToInternal(byte[] target, int sourceOffset, int targetOffset, int numberToCopy)Internal (package private) implementation ofByteString.copyTo(byte[],int,int,int).booleanequals(java.lang.Object other)(package private) booleanequalsRange(ByteString other, int offset, int length)Check equality of the substring of given length of this object starting at zero with anotherLiteralByteStringsubstring starting at offset.protected intgetOffsetIntoBytes()Offset intobytes[]to use, non-zero for substrings.(package private) byteinternalByteAt(int index)Gets the byte at the given index, assumes bounds checking has already been performed.booleanisValidUtf8()Tells whether thisByteStringrepresents a well-formed UTF-8 byte sequence, such that the original bytes can be converted to a String object and then round tripped back to bytes without loss.CodedInputStreamnewCodedInput()Creates aCodedInputStreamwhich can be used to read the bytes.java.io.InputStreamnewInput()Creates anInputStreamwhich can be used to read the bytes.protected intpartialHash(int h, int offset, int length)Compute the hash across the value bytes starting with the given hash, and return the result.protected intpartialIsValidUtf8(int state, int offset, int length)Tells whether the given byte sequence is a well-formed, malformed, or incomplete UTF-8 byte sequence.intsize()Gets the number of bytes.ByteStringsubstring(int beginIndex, int endIndex)Return the substring frombeginIndex, inclusive, toendIndex, exclusive.protected java.lang.StringtoStringInternal(java.nio.charset.Charset charset)Constructs a newStringby decoding the bytes using the specified charset.(package private) voidwriteTo(ByteOutput output)Writes thisByteStringto the providedByteOutput.voidwriteTo(java.io.OutputStream outputStream)Writes a copy of the contents of this byte string to the specified output stream argument.(package private) voidwriteToInternal(java.io.OutputStream outputStream, int sourceOffset, int numberToWrite)Internal version ofByteString.writeTo(OutputStream,int,int)that assumes all error checking has already been done.-
Methods inherited from class com.google.protobuf.ByteString.LeafByteString
getTreeDepth, isBalanced, writeToReverse
-
Methods inherited from class com.google.protobuf.ByteString
checkIndex, checkRange, concat, copyFrom, copyFrom, copyFrom, copyFrom, copyFrom, copyFrom, copyFrom, copyFromUtf8, copyTo, copyTo, empty, endsWith, fromHex, hashCode, isEmpty, iterator, newCodedBuilder, newOutput, newOutput, nioByteString, peekCachedHashCode, readFrom, readFrom, readFrom, startsWith, substring, toByteArray, toString, toString, toString, toStringUtf8, unsignedLexicographicalComparator, wrap, wrap, wrap, writeTo
-
-
-
-
Field Detail
-
serialVersionUID
private static final long serialVersionUID
- See Also:
- Constant Field Values
-
bytes
protected final byte[] bytes
-
-
Method Detail
-
byteAt
public byte byteAt(int index)
Description copied from class:ByteStringGets the byte at the given index. This method should be used only for random access to individual bytes. To access bytes sequentially, use theByteString.ByteIteratorreturned byByteString.iterator(), and callByteString.substring(int, int)first if necessary.- Specified by:
byteAtin classByteString- Parameters:
index- index of byte- Returns:
- the value
-
internalByteAt
byte internalByteAt(int index)
Description copied from class:ByteStringGets the byte at the given index, assumes bounds checking has already been performed.- Specified by:
internalByteAtin classByteString- Parameters:
index- index of byte- Returns:
- the value
-
size
public int size()
Description copied from class:ByteStringGets the number of bytes.- Specified by:
sizein classByteString- Returns:
- size in bytes
-
substring
public final ByteString substring(int beginIndex, int endIndex)
Description copied from class:ByteStringReturn the substring frombeginIndex, inclusive, toendIndex, exclusive.- Specified by:
substringin classByteString- Parameters:
beginIndex- start at this indexendIndex- the last character is the one before this index- Returns:
- substring sharing underlying data
-
copyToInternal
protected void copyToInternal(byte[] target, int sourceOffset, int targetOffset, int numberToCopy)Description copied from class:ByteStringInternal (package private) implementation ofByteString.copyTo(byte[],int,int,int). It assumes that all error checking has already been performed and thatnumberToCopy > 0.- Specified by:
copyToInternalin classByteString
-
copyTo
public final void copyTo(java.nio.ByteBuffer target)
Description copied from class:ByteStringCopies bytes into a ByteBuffer.To copy a subset of bytes, you call this method on the return value of
ByteString.substring(int, int). Example:byteString.substring(start, end).copyTo(target)- Specified by:
copyToin classByteString- Parameters:
target- ByteBuffer to copy into.
-
asReadOnlyByteBuffer
public final java.nio.ByteBuffer asReadOnlyByteBuffer()
Description copied from class:ByteStringConstructs a read-onlyjava.nio.ByteBufferwhose content is equal to the contents of this byte string. The result uses the same backing array as the byte string, if possible.- Specified by:
asReadOnlyByteBufferin classByteString- Returns:
- wrapped bytes
-
asReadOnlyByteBufferList
public final java.util.List<java.nio.ByteBuffer> asReadOnlyByteBufferList()
Description copied from class:ByteStringConstructs a list of read-onlyjava.nio.ByteBufferobjects such that the concatenation of their contents is equal to the contents of this byte string. The result uses the same backing arrays as the byte string.By returning a list, implementations of this method may be able to avoid copying even when there are multiple backing arrays.
- Specified by:
asReadOnlyByteBufferListin classByteString- Returns:
- a list of wrapped bytes
-
writeTo
public final void writeTo(java.io.OutputStream outputStream) throws java.io.IOExceptionDescription copied from class:ByteStringWrites a copy of the contents of this byte string to the specified output stream argument.- Specified by:
writeToin classByteString- Parameters:
outputStream- the output stream to which to write the data.- Throws:
java.io.IOException- if an I/O error occurs.
-
writeToInternal
final void writeToInternal(java.io.OutputStream outputStream, int sourceOffset, int numberToWrite) throws java.io.IOExceptionDescription copied from class:ByteStringInternal version ofByteString.writeTo(OutputStream,int,int)that assumes all error checking has already been done.- Specified by:
writeToInternalin classByteString- Throws:
java.io.IOException
-
writeTo
final void writeTo(ByteOutput output) throws java.io.IOException
Description copied from class:ByteStringWrites thisByteStringto the providedByteOutput. Calling this method may result in multiple operations on the targetByteOutput.This method may expose internal backing buffers of the
ByteStringto theByteOutputin order to avoid additional copying overhead. It would be possible for a maliciousByteOutputto corrupt theByteString. Use with caution!- Specified by:
writeToin classByteString- Parameters:
output- the output target to receive the bytes- Throws:
java.io.IOException- if an I/O error occurs- See Also:
UnsafeByteOperations.unsafeWriteTo(ByteString, ByteOutput)
-
toStringInternal
protected final java.lang.String toStringInternal(java.nio.charset.Charset charset)
Description copied from class:ByteStringConstructs a newStringby decoding the bytes using the specified charset.- Specified by:
toStringInternalin classByteString- Parameters:
charset- encode using this charset- Returns:
- new string
-
isValidUtf8
public final boolean isValidUtf8()
Description copied from class:ByteStringTells whether thisByteStringrepresents a well-formed UTF-8 byte sequence, such that the original bytes can be converted to a String object and then round tripped back to bytes without loss.More precisely, returns
truewhenever:Arrays.equals(byteString.toByteArray(), new String(byteString.toByteArray(), "UTF-8").getBytes("UTF-8"))This method returns
falsefor "overlong" byte sequences, as well as for 3-byte sequences that would map to a surrogate character, in accordance with the restricted definition of UTF-8 introduced in Unicode 3.1. Note that the UTF-8 decoder included in Oracle's JDK has been modified to also reject "overlong" byte sequences, but (as of 2011) still accepts 3-byte surrogate character byte sequences.See the Unicode Standard,
Table 3-6. UTF-8 Bit Distribution,
Table 3-7. Well Formed UTF-8 Byte Sequences.- Specified by:
isValidUtf8in classByteString- Returns:
- whether the bytes in this
ByteStringare a well-formed UTF-8 byte sequence
-
partialIsValidUtf8
protected final int partialIsValidUtf8(int state, int offset, int length)Description copied from class:ByteStringTells whether the given byte sequence is a well-formed, malformed, or incomplete UTF-8 byte sequence. This method accepts and returns a partial state result, allowing the bytes for a complete UTF-8 byte sequence to be composed from multipleByteStringsegments.- Specified by:
partialIsValidUtf8in classByteString- Parameters:
state- either0(if this is the initial decoding operation) or the value returned from a call to a partial decoding method for the previous bytesoffset- offset of the first byte to checklength- number of bytes to check- Returns:
-1if the partial byte sequence is definitely malformed,0if 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.
-
equals
public final boolean equals(java.lang.Object other)
- Specified by:
equalsin classByteString
-
equalsRange
final boolean equalsRange(ByteString other, int offset, int length)
Check equality of the substring of given length of this object starting at zero with anotherLiteralByteStringsubstring starting at offset.- Specified by:
equalsRangein classByteString.LeafByteString- Parameters:
other- what to compare a substring inoffset- offset into otherlength- number of bytes to compare- Returns:
- true for equality of substrings, else false.
-
partialHash
protected final int partialHash(int h, int offset, int length)Description copied from class:ByteStringCompute the hash across the value bytes starting with the given hash, and return the result. This is used to compute the hash across strings represented as a set of pieces by allowing the hash computation to be continued from piece to piece.- Specified by:
partialHashin classByteString- Parameters:
h- starting hash valueoffset- offset into this value to start looking at data valueslength- number of data values to include in the hash computation- Returns:
- ending hash value
-
newInput
public final java.io.InputStream newInput()
Description copied from class:ByteStringCreates anInputStreamwhich can be used to read the bytes.The
InputStreamreturned by this method is guaranteed to be completely non-blocking. The methodInputStream.available()returns the number of bytes remaining in the stream. The methodsInputStream.read(byte[]),InputStream.read(byte[],int,int)andInputStream.skip(long)will read/skip as many bytes as are available. The methodInputStream.markSupported()returnstrue.The methods in the returned
InputStreammight not be thread safe.- Specified by:
newInputin classByteString- Returns:
- an input stream that returns the bytes of this byte string.
-
newCodedInput
public final CodedInputStream newCodedInput()
Description copied from class:ByteStringCreates aCodedInputStreamwhich can be used to read the bytes. Using this is often more efficient than creating aCodedInputStreamthat wraps the result ofByteString.newInput().- Specified by:
newCodedInputin classByteString- Returns:
- stream based on wrapped data
-
getOffsetIntoBytes
protected int getOffsetIntoBytes()
Offset intobytes[]to use, non-zero for substrings.- Returns:
- always 0 for this class
-
-