public abstract class ByteString extends Objectimplements Iterable <Byte >
String. Concatenation is likewise supported without copying (long strings) by building a tree of pieces in
RopeByteString.
Like String, the contents of a ByteString can never be observed to change, not even in the presence of a data race or incorrect API usage in the client code.
| Modifier and Type | Class and Description |
|---|---|
static interface |
ByteString
This interface extends
Iterator<Byte>, so that we can return an unboxed
byte.
|
static class |
ByteString
Outputs to a
ByteString instance.
|
| Modifier and Type | Field and Description |
|---|---|
static ByteString |
EMPTY
Empty
ByteString.
|
| Modifier and Type | Method and Description |
|---|---|
abstract ByteBuffer |
asReadOnlyByteBuffer()
Constructs a read-only
java.nio.ByteBuffer whose content is equal to the contents of this byte string.
|
abstract List |
asReadOnlyByteBufferList()
Constructs a list of read-only
java.nio.ByteBuffer objects such that the concatenation of their contents is equal to the contents of this byte string.
|
abstract byte |
byteAt(int index)
Gets the byte at the given index.
|
ByteString |
concat(ByteString
Concatenate the given
ByteString to this one.
|
static ByteString |
copyFrom(byte[] bytes)
Copies the given bytes into a
ByteString.
|
static ByteString |
copyFrom(byte[] bytes, int offset, int size)
Copies the given bytes into a
ByteString.
|
static ByteString |
copyFrom(ByteBuffer
Copies the remaining bytes from a
java.nio.ByteBuffer into a
ByteString.
|
static ByteString |
copyFrom(ByteBuffer
Copies the next
size bytes from a
java.nio.ByteBuffer into a
ByteString.
|
static ByteString |
copyFrom(Iterable
Concatenates all byte strings in the iterable and returns the result.
|
static ByteString |
copyFrom(String
Encodes
text into a sequence of bytes using the named charset and returns the result as a
ByteString.
|
static ByteString |
copyFromUtf8(String
Encodes
text into a sequence of UTF-8 bytes and returns the result as a
ByteString.
|
void |
copyTo(byte[] target, int offset)
Copies bytes into a buffer at the given offset.
|
void |
copyTo(byte[] target, int sourceOffset, int targetOffset, int numberToCopy)
Copies bytes into a buffer.
|
abstract void |
copyTo(ByteBuffer
Copies bytes into a ByteBuffer.
|
protected abstract void |
copyToInternal(byte[] target, int sourceOffset, int targetOffset, int numberToCopy)
Internal (package private) implementation of
|
boolean |
endsWith(ByteString
Tests if this bytestring ends with the specified suffix.
|
abstract boolean |
equals(Object
|
protected abstract int |
getTreeDepth()
Return the depth of the tree representing this
ByteString, if any, whose root is this node.
|
abstract int |
hashCode()
Return a non-zero hashCode depending only on the sequence of bytes in this ByteString.
|
protected abstract boolean |
isBalanced()
Return
true if this ByteString is literal (a leaf node) or a flat-enough tree in the sense of
RopeByteString.
|
boolean |
isEmpty()
Returns
true if the size is
0,
false otherwise.
|
abstract boolean |
isValidUtf8()
Tells whether this
ByteString represents 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.
|
abstract ByteString |
iterator()
Return a
ByteString.ByteIterator over the bytes in the ByteString.
|
abstract CodedInputStream |
newCodedInput()
Creates a
CodedInputStream which can be used to read the bytes.
|
abstract InputStream |
newInput()
Creates an
InputStream which can be used to read the bytes.
|
static ByteString |
newOutput()
Creates a new
ByteString.Output.
|
static ByteString |
newOutput(int initialCapacity)
Creates a new
ByteString.Output with the given initial capacity.
|
protected abstract int |
partialHash(int h, int offset, int length)
Compute the hash across the value bytes starting with the given hash, and return the result.
|
protected abstract int |
partialIsValidUtf8(int state, int offset, int length)
Tells whether the given byte sequence is a well-formed, malformed, or incomplete UTF-8 byte sequence.
|
protected abstract int |
peekCachedHashCode()
Return the cached hash code if available.
|
static ByteString |
readFrom(InputStream
Completely reads the given stream's bytes into a
ByteString, blocking if necessary until all bytes are read through to the end of the stream.
|
static ByteString |
readFrom(InputStream
Completely reads the given stream's bytes into a
ByteString, blocking if necessary until all bytes are read through to the end of the stream.
|
static ByteString |
readFrom(InputStream
|
abstract int |
size()
Gets the number of bytes.
|
boolean |
startsWith(ByteString
Tests if this bytestring starts with the specified prefix.
|
ByteString |
substring(int beginIndex)
Return the substring from
beginIndex, inclusive, to the end of the string.
|
abstract ByteString |
substring(int beginIndex, int endIndex)
Return the substring from
beginIndex, inclusive, to
endIndex, exclusive.
|
byte[] |
toByteArray()
Copies bytes to a
byte[].
|
String |
toString()
|
abstract String |
toString(String
Constructs a new
String by decoding the bytes using the specified charset.
|
String |
toStringUtf8()
Constructs a new
String by decoding the bytes as UTF-8.
|
abstract void |
writeTo(OutputStream
Writes the complete contents of this byte string to the specified output stream argument.
|
clone, finalize, getClass, notify, notifyAll, wait, wait, waitforEach, spliteratorpublic static final ByteStringEMPTY
ByteString.
public abstract byte byteAt(int index)
ByteString.ByteIterator returned by
iterator(), and call
substring(int, int) first if necessary.
index - index of byte
ArrayIndexOutOfBoundsException -
index is < 0 or >= size
public abstract ByteString.ByteIterator iterator()
ByteString.ByteIterator over the bytes in the ByteString. To avoid auto-boxing, you may get the iterator manually and call
ByteString.ByteIterator.nextByte() .
public abstract int size()
public boolean isEmpty()
true if the size is
0,
false otherwise.
public ByteStringsubstring(int beginIndex)
beginIndex, inclusive, to the end of the string.
beginIndex - start at this index
IndexOutOfBoundsException - if
beginIndex < 0 or
beginIndex > size().
public abstract ByteStringsubstring(int beginIndex, int endIndex)
beginIndex, inclusive, to
endIndex, exclusive.
beginIndex - start at this index
endIndex - the last character is the one before this index
IndexOutOfBoundsException - if
beginIndex < 0,
endIndex > size(), or
beginIndex > endIndex.
public boolean startsWith(ByteStringprefix)
String.startsWith(String)
prefix - the prefix.
true if the byte sequence represented by the argument is a prefix of the byte sequence represented by this string;
false otherwise.
public boolean endsWith(ByteStringsuffix)
String.endsWith(String)
suffix - the suffix.
true if the byte sequence represented by the argument is a suffix of the byte sequence represented by this string;
false otherwise.
public static ByteStringcopyFrom(byte[] bytes, int offset, int size)
ByteString.
bytes - source array
offset - offset in source array
size - number of bytes to copy
ByteString
public static ByteStringcopyFrom(byte[] bytes)
ByteString.
bytes - to copy
ByteString
public static ByteStringcopyFrom(ByteBuffer bytes, int size)
size bytes from a
java.nio.ByteBuffer into a
ByteString.
bytes - source buffer
size - number of bytes to copy
ByteString
public static ByteStringcopyFrom(ByteBuffer bytes)
java.nio.ByteBuffer into a
ByteString.
bytes - sourceBuffer
ByteString
public static ByteStringcopyFrom(String text, String charsetName) throws UnsupportedEncodingException
text into a sequence of bytes using the named charset and returns the result as a
ByteString.
text - source string
charsetName - encoding to use
ByteString
UnsupportedEncodingException - if the encoding isn't found
public static ByteStringcopyFromUtf8(String text)
text into a sequence of UTF-8 bytes and returns the result as a
ByteString.
text - source string
ByteString
public static ByteStringreadFrom(InputStream streamToDrain) throws IOException
ByteString, blocking if necessary until all bytes are read through to the end of the stream.
Performance notes: The returned
ByteString is an immutable tree of byte arrays ("chunks") of the stream data. The first chunk is small, with subsequent chunks each being double the size, up to 8K. If the caller knows the precise length of the stream and wishes to avoid all unnecessary copies and allocations, consider using the two-argument version of this method, below.
streamToDrain - The source stream, which is read completely but not closed.
ByteString which is made up of chunks of various sizes, depending on the behavior of the underlying stream.
IOException - IOException is thrown if there is a problem reading the underlying stream.
public static ByteStringreadFrom(InputStream streamToDrain, int chunkSize) throws IOException
ByteString, blocking if necessary until all bytes are read through to the end of the stream.
Performance notes: The returned
ByteString is an immutable tree of byte arrays ("chunks") of the stream data. The chunkSize parameter sets the size of these byte arrays. In particular, if the chunkSize is precisely the same as the length of the stream, unnecessary allocations and copies will be avoided. Otherwise, the chunks will be of the given size, except for the last chunk, which will be resized (via a reallocation and copy) to contain the remainder of the stream.
streamToDrain - The source stream, which is read completely but not closed.
chunkSize - The size of the chunks in which to read the stream.
ByteString which is made up of chunks of the given size.
IOException - IOException is thrown if there is a problem reading the underlying stream.
public static ByteStringreadFrom(InputStream streamToDrain, int minChunkSize, int maxChunkSize) throws IOException
IOException
public ByteStringconcat(ByteString other)
ByteString to this one. Short concatenations, of total size smaller than
CONCATENATE_BY_COPY_SIZE, are produced by copying the underlying bytes (as per Rope.java,
BAP95 . In general, the concatenate involves no copying.
other - string to concatenate
ByteString instance
public static ByteStringcopyFrom(Iterable <ByteString > byteStrings)
The returned ByteString is not necessarily a unique object. If the list is empty, the returned object is the singleton empty ByteString. If the list has only one element, that ByteString will be returned without copying.
byteStrings - strings to be concatenated
ByteString
public void copyTo(byte[] target,
int offset)
target - buffer to copy into
offset - in the target buffer
IndexOutOfBoundsException - if the offset is negative or too large
public void copyTo(byte[] target,
int sourceOffset,
int targetOffset,
int numberToCopy)
target - buffer to copy into
sourceOffset - offset within these bytes
targetOffset - offset within the target buffer
numberToCopy - number of bytes to copy
IndexOutOfBoundsException - if an offset or size is negative or too large
protected abstract void copyToInternal(byte[] target,
int sourceOffset,
int targetOffset,
int numberToCopy)
public abstract void copyTo(ByteBuffertarget)
target - ByteBuffer to copy into.
ReadOnlyBufferException - if the
target is read-only
BufferOverflowException - if the
target's remaining() space is not large enough to hold the data.
public byte[] toByteArray()
byte[].
public abstract void writeTo(OutputStreamout) throws IOException
out - the output stream to which to write the data.
IOException - if an I/O error occurs.
public abstract ByteBufferasReadOnlyByteBuffer()
java.nio.ByteBuffer whose content is equal to the contents of this byte string. The result uses the same backing array as the byte string, if possible.
public abstract List<ByteBuffer > asReadOnlyByteBufferList()
java.nio.ByteBuffer objects 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.
public abstract StringtoString(String charsetName) throws UnsupportedEncodingException
String by decoding the bytes using the specified charset.
charsetName - encode using this charset
UnsupportedEncodingException - if charset isn't recognized
public StringtoStringUtf8()
String by decoding the bytes as UTF-8.
public abstract boolean isValidUtf8()
ByteString represents 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 true whenever:
Arrays.equals(byteString.toByteArray(), new String(byteString.toByteArray(), "UTF-8").getBytes("UTF-8"))
This method returns false for "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.
ByteString are a well-formed UTF-8 byte sequence
protected abstract int partialIsValidUtf8(int state,
int offset,
int length)
ByteString segments.
state - either
0 (if this is the initial decoding operation) or the value returned from a call to a partial decoding method for the previous bytes
offset - offset of the first byte to check
length - number of bytes to check
-1 if the partial byte sequence is definitely malformed,
0 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.
public abstract boolean equals(Objecto)
public abstract int hashCode()
public abstract InputStreamnewInput()
InputStream which can be used to read the bytes.
The InputStream returned by this method is guaranteed to be completely non-blocking. The method InputStream returns the number of bytes remaining in the stream. The methods InputStream#read(byte[]), {@link InputStream#read(byte[],int,int)} and {@link InputStream#skip(long)} will read/skip as many bytes as are available.
The methods in the returned {@link InputStream} might not be thread safe.
public abstract CodedInputStreamnewCodedInput()
CodedInputStream which can be used to read the bytes. Using this is often more efficient than creating a
CodedInputStream that wraps the result of
newInput().
public static ByteString.Output newOutput(int initialCapacity)
ByteString.Output with the given initial capacity. Call
ByteString.Output.toByteString() to create the
ByteString instance.
A ByteString.Output offers the same functionality as a ByteArrayOutputStream, except that it returns a ByteString rather than a byte array.
initialCapacity - estimate of number of bytes to be written
OutputStream for building a
ByteString
public static ByteString.Output newOutput()
ByteString.Output. Call
ByteString.Output.toByteString() to create the
ByteString instance.
A ByteString.Output offers the same functionality as a ByteArrayOutputStream, except that it returns a ByteString rather than a byte array.
OutputStream for building a
ByteString
protected abstract int getTreeDepth()
ByteString, if any, whose root is this node. If this is a leaf node, return 0.
protected abstract boolean isBalanced()
true if this ByteString is literal (a leaf node) or a flat-enough tree in the sense of
RopeByteString.
protected abstract int peekCachedHashCode()
protected abstract int partialHash(int h,
int offset,
int length)
h - starting hash value
offset - offset into this value to start looking at data values
length - number of data values to include in the hash computation
public StringtoString()