Class ByteStringBuilder
- All Implemented Interfaces:
Comparable<ByteSequence>,ByteSequence
-
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final intMaximum size in bytes of a compact encoded value.Fields inherited from interface org.forgerock.opendj.ldap.ByteSequence
BYTE_ARRAY_COMPARATOR, COMPARATOR -
Constructor Summary
ConstructorsConstructorDescriptionCreates a new byte string builder with an initial capacity of 32 bytes.ByteStringBuilder(int capacity) Creates a new byte string builder with the specified initial capacity.Creates a new byte string builder with the content of the provided ByteSequence. -
Method Summary
Modifier and TypeMethodDescriptionappendBERLength(int length) Appends the ASN.1 BER length encoding representation of the provided integer to this byte string builder.appendByte(int b) Appends the provided byte to this byte string builder.appendBytes(byte[] bytes) Appends the provided byte array to this byte string builder.appendBytes(byte[] bytes, int offset, int length) Appends the provided byte array to this byte string builder.voidappendBytes(DataInput stream, int length) Appends the providedDataInputto this byte string builder.intappendBytes(InputStream stream, int length) Appends the providedInputStreamto this byte string builder.appendBytes(ByteBuffer buffer, int length) Appends the providedByteBufferto this byte string builder.appendBytes(ByteSequence bytes) Appends the providedByteSequenceto this byte string builder.appendBytes(ByteSequenceReader reader, int length) Appends the providedByteSequenceReaderto this byte string builder.appendCompactUnsigned(long value) Appends the compact encoded bytes of the provided unsigned long to this byte string builder.appendInt(int i) Appends the big-endian encoded bytes of the provided integer to this byte string builder.appendLong(long l) Appends the big-endian encoded bytes of the provided long to this byte string builder.Appends the byte string representation of the provided object to this byte string builder.appendShort(int i) Appends the big-endian encoded bytes of the provided short to this byte string builder.appendUtf8(char[] chars) Appends the UTF-8 encoded bytes of the provided char array to this byte string builder.appendUtf8(String s) Appends the UTF-8 encoded bytes of the provided string to this byte string builder.Returns anOutputStreamwhose write operations append data to this byte string builder.asReader()Returns aByteSequenceReaderwhich can be used to incrementally read and decode data from this byte string builder.bytebyteAt(int index) Returns the byte value at the specified index.intcapacity()Returns the current capacity of this byte string builder.clear()Sets the length of this byte string builder to zero.clearAndTruncate(int thresholdCapacity, int newCapacity) Sets the length of this byte string builder to zero, and resets the capacity to the specified size if above provided threshold.intcompareTo(byte[] bytes, int offset, int length) Compares this byte sequence with the specified byte array sub-sequence for order.intCompares this byte sequence with the specified byte sequence for order.byte[]copyTo(byte[] bytes) Copies the contents of this byte sequence to the provided byte array.byte[]copyTo(byte[] bytes, int offset) Copies the contents of this byte sequence to the specified location in the provided byte array.copyTo(OutputStream stream) Copies the entire contents of this byte sequence to the providedOutputStream.copyTo(ByteBuffer byteBuffer) Appends the content of this byte sequence to the providedByteBufferstarting at it's current position.intcopyTo(WritableByteChannel channel) Copies the entire contents of this byte string to the providedWritableByteChannel.booleancopyTo(CharBuffer charBuffer, CharsetDecoder decoder) Appends the content of this byte sequence decoded using provided charset decoder to the providedCharBufferstarting at it's current position.copyTo(ByteStringBuilder builder) Appends the entire contents of this byte sequence to the providedByteStringBuilder.ensureAdditionalCapacity(int size) Ensures that the specified number of additional bytes will fit in this byte string builder and resizes it if necessary.booleanequals(byte[] bytes, int offset, int length) Indicates whether the provided byte array sub-sequence is equal to this byte sequence.booleanIndicates whether the provided object is equal to this byte string builder.byte[]Returns the byte array that backs this byte string builder.inthashCode()Returns a hash code for this byte string builder.booleanisEmpty()Returnstrueif this byte sequence has a length of zero.intlength()Returns the length of this byte sequence.voidsetByte(int index, byte b) Sets the byte value at the specified index.setLength(int newLength) Sets the length of this byte string builder.booleanstartsWith(ByteSequence prefix) Tests if this ByteSequence starts with the specified prefix.subSequence(int start, int end) Returns a new byte sequence that is a subsequence of this byte sequence.Returns the Base64 encoded string representation of this byte string.byte[]Returns a byte array containing the bytes in this sequence in the same order as this sequence.Returns theByteStringrepresentation of this byte string builder.toString()Returns the UTF-8 decoded string representation of this byte sequence.Attempts to reduce storage used for this byte string builder.
-
Field Details
-
MAX_COMPACT_SIZE
Maximum size in bytes of a compact encoded value.- See Also:
-
-
Constructor Details
-
ByteStringBuilder
public ByteStringBuilder()Creates a new byte string builder with an initial capacity of 32 bytes. -
ByteStringBuilder
Creates a new byte string builder with the specified initial capacity.- Parameters:
capacity- The initial capacity.- Throws:
IllegalArgumentException- If thecapacityis negative.
-
ByteStringBuilder
Creates a new byte string builder with the content of the provided ByteSequence. Its capacity is set to the length of the provided ByteSequence.- Parameters:
bs- The ByteSequence to copy
-
-
Method Details
-
appendByte
Appends the provided byte to this byte string builder.Note: this method accepts an
intfor ease of reading and writing.This method only keeps the lowest 8-bits of the provided
int. Higher bits will be truncated. This method performs the equivalent of:int i = ...; int i8bits = i & 0xFF; // only use "i8bits"
ORint i = ...; byte b = (byte) i; // only use "b"
- Parameters:
b- The byte to be appended to this byte string builder.- Returns:
- This byte string builder.
-
appendBytes
Appends the provided byte array to this byte string builder.An invocation of the form:
src.append(bytes)
Behaves in exactly the same way as the invocation:src.append(bytes, 0, bytes.length);
- Parameters:
bytes- The byte array to be appended to this byte string builder.- Returns:
- This byte string builder.
-
appendBytes
Appends the provided byte array to this byte string builder.- Parameters:
bytes- The byte array to be appended to this byte string builder.offset- The offset of the byte array to be used; must be non-negative and no larger thanbytes.length.length- The length of the byte array to be used; must be non-negative and no larger thanbytes.length - offset.- Returns:
- This byte string builder.
- Throws:
IndexOutOfBoundsException- Ifoffsetis negative or iflengthis negative or ifoffset + lengthis greater thanbytes.length.
-
appendBytes
Appends the providedByteBufferto this byte string builder.- Parameters:
buffer- The byte buffer to be appended to this byte string builder.length- The number of bytes to be appended frombuffer.- Returns:
- This byte string builder.
- Throws:
IndexOutOfBoundsException- Iflengthis less than zero or greater thanbuffer.remaining().
-
appendBytes
Appends the providedByteSequenceto this byte string builder.- Parameters:
bytes- The byte sequence to be appended to this byte string builder.- Returns:
- This byte string builder.
-
appendBytes
Appends the providedByteSequenceReaderto this byte string builder.- Parameters:
reader- The byte sequence reader to be appended to this byte string builder.length- The number of bytes to be appended fromreader.- Returns:
- This byte string builder.
- Throws:
IndexOutOfBoundsException- Iflengthis less than zero or greater thanreader.remaining().
-
appendUtf8
Appends the UTF-8 encoded bytes of the provided char array to this byte string builder.- Parameters:
chars- The char array whose UTF-8 encoding is to be appended to this byte string builder.- Returns:
- This byte string builder.
-
appendBytes
Appends the providedDataInputto this byte string builder.- Parameters:
stream- The data input stream to be appended to this byte string builder.length- The maximum number of bytes to be appended frominput.- Throws:
IndexOutOfBoundsException- Iflengthis less than zero.EOFException- If this stream reaches the end before reading all the bytes.IOException- If an I/O error occurs.
-
appendBytes
Appends the providedInputStreamto this byte string builder.- Parameters:
stream- The input stream to be appended to this byte string builder.length- The maximum number of bytes to be appended frombuffer.- Returns:
- The number of bytes read from the input stream, or
-1if the end of the input stream has been reached. - Throws:
IndexOutOfBoundsException- Iflengthis less than zero.IOException- If an I/O error occurs.
-
appendInt
Appends the big-endian encoded bytes of the provided integer to this byte string builder.- Parameters:
i- The integer whose big-endian encoding is to be appended to this byte string builder.- Returns:
- This byte string builder.
-
appendLong
Appends the big-endian encoded bytes of the provided long to this byte string builder.- Parameters:
l- The long whose big-endian encoding is to be appended to this byte string builder.- Returns:
- This byte string builder.
-
appendCompactUnsigned
Appends the compact encoded bytes of the provided unsigned long to this byte string builder. This method allows to encode unsigned long up to 56 bits using fewer bytes (from 1 to 8) than append(long). The encoding has the important property that it preserves ordering, so it can be used for keys.- Parameters:
value- The long whose compact encoding is to be appended to this byte string builder.- Returns:
- This byte string builder.
-
appendObject
Appends the byte string representation of the provided object to this byte string builder. The object is converted to a byte string as follows:- if the object is an instance of
ByteSequencethen this method is equivalent to callingappendBytes(ByteSequence) - if the object is a
byte[]then this method is equivalent to callingappendBytes(byte[]) - if the object is a
char[]then this method is equivalent to callingappendUtf8(char[]) - for all other types of object this method is equivalent to calling
appendUtf8(String)with thetoString()representation of the provided object.
LongandIntegerobjects like any other type ofObject. More specifically, the following invocations are not equivalent:append(0)is not equivalent toappend((Object) 0)append(0L)is not equivalent toappend((Object) 0L)
- Parameters:
o- The object to be appended to this byte string builder.- Returns:
- This byte string builder.
- if the object is an instance of
-
appendShort
Appends the big-endian encoded bytes of the provided short to this byte string builder.Note: this method accepts an
intfor ease of reading and writing.This method only keeps the lowest 16-bits of the provided
int. Higher bits will be truncated. This method performs the equivalent of:int i = ...; int i16bits = i & 0xFFFF; // only use "i16bits"
ORint i = ...; short s = (short) i; // only use "s"
- Parameters:
i- The short whose big-endian encoding is to be appended to this byte string builder.- Returns:
- This byte string builder.
-
appendUtf8
Appends the UTF-8 encoded bytes of the provided string to this byte string builder.- Parameters:
s- The string whose UTF-8 encoding is to be appended to this byte string builder.- Returns:
- This byte string builder.
-
appendBERLength
Appends the ASN.1 BER length encoding representation of the provided integer to this byte string builder.- Parameters:
length- The value to encode using the BER length encoding rules.- Returns:
- This byte string builder.
-
asOutputStream
Returns anOutputStreamwhose write operations append data to this byte string builder. The returned output stream will never throw anIOExceptionand itsclosemethod does not do anything.- Returns:
- An
OutputStreamwhose write operations append data to this byte string builder.
-
asReader
Returns aByteSequenceReaderwhich can be used to incrementally read and decode data from this byte string builder.NOTE: all concurrent updates to this byte string builder are supported with the exception of
clear(). Any invocations ofclear()must be accompanied by a subsequent call toByteSequenceReader.rewind().- Specified by:
asReaderin interfaceByteSequence- Returns:
- The
ByteSequenceReaderwhich can be used to incrementally read and decode data from this byte string builder. - See Also:
-
byteAt
Description copied from interface:ByteSequenceReturns the byte value at the specified index.An index ranges from zero to
length() - 1. The first byte value of the sequence is at index zero, the next at index one, and so on, as for array indexing.- Specified by:
byteAtin interfaceByteSequence- Parameters:
index- The index of the byte to be returned.- Returns:
- The byte value at the specified index.
-
capacity
Returns the current capacity of this byte string builder. The capacity may increase as more data is appended.- Returns:
- The current capacity of this byte string builder.
-
clear
Sets the length of this byte string builder to zero.NOTE: if this method is called, then
ByteSequenceReader.rewind()must also be called on any associated byte sequence readers in order for them to remain valid.- Returns:
- This byte string builder.
- See Also:
-
clearAndTruncate
Sets the length of this byte string builder to zero, and resets the capacity to the specified size if above provided threshold.NOTE: if this method is called, then
ByteSequenceReader.rewind()must also be called on any associated byte sequence readers in order for them to remain valid.- Parameters:
thresholdCapacity- The threshold capacity triggering a truncatenewCapacity- The new capacity.- Returns:
- This byte string builder.
- Throws:
IllegalArgumentException- If thenewCapacityis negative or thenewCapacityis bigger than thethresholdCapacity.- See Also:
-
compareTo
Description copied from interface:ByteSequenceCompares this byte sequence with the specified byte array sub-sequence for order. Returns a negative integer, zero, or a positive integer depending on whether this byte sequence is less than, equal to, or greater than the specified byte array sub-sequence.- Specified by:
compareToin interfaceByteSequence- Parameters:
bytes- The byte array to compare.offset- The offset of the sub-sequence in the byte array to be compared; must be non-negative and no larger thanbytes.length.length- The length of the sub-sequence in the byte array to be compared; must be non-negative and no larger thanbytes.length - offset.- Returns:
- A negative integer, zero, or a positive integer depending on whether this byte sequence is less than, equal to, or greater than the specified byte array sub-sequence.
-
compareTo
Description copied from interface:ByteSequenceCompares this byte sequence with the specified byte sequence for order. Returns a negative integer, zero, or a positive integer depending on whether this byte sequence is less than, equal to, or greater than the specified object.- Specified by:
compareToin interfaceByteSequence- Specified by:
compareToin interfaceComparable<ByteSequence>- Parameters:
o- The byte sequence to be compared.- Returns:
- A negative integer, zero, or a positive integer depending on whether this byte sequence is less than, equal to, or greater than the specified object.
-
copyTo
Description copied from interface:ByteSequenceCopies the contents of this byte sequence to the provided byte array.Copying will stop when either the entire content of this sequence has been copied or if the end of the provided byte array has been reached.
An invocation of the form:
src.copyTo(bytes)
Behaves in exactly the same way as the invocation:src.copyTo(bytes, 0);
- Specified by:
copyToin interfaceByteSequence- Parameters:
bytes- The byte array to which bytes are to be copied.- Returns:
- The byte array.
-
copyTo
Description copied from interface:ByteSequenceCopies the contents of this byte sequence to the specified location in the provided byte array.Copying will stop when either the entire content of this sequence has been copied or if the end of the provided byte array has been reached.
An invocation of the form:
src.copyTo(bytes, offset)
Behaves in exactly the same way as the invocation:int len = Math.min(src.length(), bytes.length - offset); for (int i = 0; i < len; i++) bytes[offset + i] = src.get(i);Except that it is potentially much more efficient.- Specified by:
copyToin interfaceByteSequence- Parameters:
bytes- The byte array to which bytes are to be copied.offset- The offset within the array of the first byte to be written; must be non-negative and no larger than bytes.length.- Returns:
- The byte array.
-
copyTo
Description copied from interface:ByteSequenceAppends the content of this byte sequence to the providedByteBufferstarting at it's current position. The position of the buffer is then incremented by the length of this sequence.- Specified by:
copyToin interfaceByteSequence- Parameters:
byteBuffer- The buffer to copy to. It must be large enough to receive all bytes.- Returns:
- The buffer.
-
copyTo
Description copied from interface:ByteSequenceAppends the entire contents of this byte sequence to the providedByteStringBuilder.- Specified by:
copyToin interfaceByteSequence- Parameters:
builder- The builder to copy to.- Returns:
- The builder.
-
copyTo
Description copied from interface:ByteSequenceAppends the content of this byte sequence decoded using provided charset decoder to the providedCharBufferstarting at it's current position. The position of charBuffer is then incremented by the length of this sequence.- Specified by:
copyToin interfaceByteSequence- Parameters:
charBuffer- The buffer to copy to, if decoding is successful. It must be large enough to receive all decoded characters.decoder- The charset decoder to use for decoding.- Returns:
trueif byte string was successfully decoded and charBuffer is large enough to receive the resulting string,falseotherwise
-
copyTo
Description copied from interface:ByteSequenceCopies the entire contents of this byte sequence to the providedOutputStream.- Specified by:
copyToin interfaceByteSequence- Parameters:
stream- TheOutputStreamto copy to.- Returns:
- The
OutputStream. - Throws:
IOException- If an error occurs while writing to theOutputStream.
-
copyTo
Copies the entire contents of this byte string to the providedWritableByteChannel.- Parameters:
channel- TheWritableByteChannelto copy to.- Returns:
- The number of bytes written, possibly zero
- Throws:
IOException- If some other I/O error occurs- See Also:
-
ensureAdditionalCapacity
Ensures that the specified number of additional bytes will fit in this byte string builder and resizes it if necessary.- Parameters:
size- The number of additional bytes.- Returns:
- This byte string builder.
-
equals
Description copied from interface:ByteSequenceIndicates whether the provided byte array sub-sequence is equal to this byte sequence. In order for it to be considered equal, the provided byte array sub-sequence must contain the same bytes in the same order.- Specified by:
equalsin interfaceByteSequence- Parameters:
bytes- The byte array for which to make the determination.offset- The offset of the sub-sequence in the byte array to be compared; must be non-negative and no larger thanbytes.length.length- The length of the sub-sequence in the byte array to be compared; must be non-negative and no larger thanbytes.length - offset.- Returns:
trueif the content of the provided byte array sub-sequence is equal to that of this byte sequence, orfalseif not.
-
equals
Indicates whether the provided object is equal to this byte string builder. In order for it to be considered equal, the provided object must be a byte sequence containing the same bytes in the same order.- Specified by:
equalsin interfaceByteSequence- Overrides:
equalsin classObject- Parameters:
o- The object for which to make the determination.- Returns:
trueif the provided object is a byte sequence whose content is equal to that of this byte string builder, orfalseif not.
-
getBackingArray
Returns the byte array that backs this byte string builder. Modifications to this byte string builder's content may cause the returned array's content to be modified, and vice versa.Note that the length of the returned array is only guaranteed to be the same as the length of this byte string builder immediately after a call to
trimToSize().In addition, subsequent modifications to this byte string builder may cause the backing byte array to be reallocated thus decoupling the returned byte array from this byte string builder.
- Returns:
- The byte array that backs this byte string builder.
-
hashCode
Returns a hash code for this byte string builder. It will be the sum of all of the bytes contained in the byte string builder.NOTE: subsequent changes to this byte string builder will invalidate the returned hash code.
- Specified by:
hashCodein interfaceByteSequence- Overrides:
hashCodein classObject- Returns:
- A hash code for this byte string builder.
-
isEmpty
Description copied from interface:ByteSequenceReturnstrueif this byte sequence has a length of zero.- Specified by:
isEmptyin interfaceByteSequence- Returns:
trueif this byte sequence has a length of zero.
-
length
Description copied from interface:ByteSequenceReturns the length of this byte sequence.- Specified by:
lengthin interfaceByteSequence- Returns:
- The length of this byte sequence.
-
setByte
Sets the byte value at the specified index.An index ranges from zero to
length() - 1. The first byte value of the sequence is at index zero, the next at index one, and so on, as for array indexing.- Parameters:
index- The index of the byte to be set.b- The byte to set on this byte string builder.- Throws:
IndexOutOfBoundsException- If the index argument is negative or not less than length().
-
setLength
Sets the length of this byte string builder.If the
newLengthargument is less than the current length, the length is changed to the specified length.If the
newLengthargument is greater than or equal to the current length, then the capacity is increased and sufficient null bytes are appended so that length becomes thenewLengthargument.The
newLengthargument must be greater than or equal to0.- Parameters:
newLength- The new length.- Returns:
- This byte string builder.
- Throws:
IndexOutOfBoundsException- If thenewLengthargument is negative.
-
subSequence
Returns a new byte sequence that is a subsequence of this byte sequence.The subsequence starts with the byte value at the specified
startindex and ends with the byte value at indexend - 1. The length (in bytes) of the returned sequence isend - start, so ifstart == endthen an empty sequence is returned.NOTE: the returned sub-sequence will be robust against all updates to the byte string builder except for invocations of the method
clear(). If a permanent immutable byte sequence is required then callers should invoketoByteString()on the returned byte sequence.- Specified by:
subSequencein interfaceByteSequence- Parameters:
start- The start index, inclusive.end- The end index, exclusive.- Returns:
- The newly created byte subsequence.
-
startsWith
Description copied from interface:ByteSequenceTests if this ByteSequence starts with the specified prefix.- Specified by:
startsWithin interfaceByteSequence- Parameters:
prefix- The prefix.- Returns:
- true if the byte sequence represented by the argument is a prefix of the byte sequence represented by this ByteSequence; false otherwise. Note also that true will be returned if the argument is an empty sequence or is equal to this ByteSequence object as determined by the equals(Object) method.
-
toBase64String
Description copied from interface:ByteSequenceReturns the Base64 encoded string representation of this byte string.- Specified by:
toBase64Stringin interfaceByteSequence- Returns:
- The Base64 encoded string representation of this byte string.
- See Also:
-
toByteArray
Description copied from interface:ByteSequenceReturns a byte array containing the bytes in this sequence in the same order as this sequence. The length of the byte array will be the length of this sequence.An invocation of the form:
src.toByteArray()
Behaves in exactly the same way as the invocation:src.copyTo(new byte[src.length()]);
- Specified by:
toByteArrayin interfaceByteSequence- Returns:
- A byte array consisting of exactly this sequence of bytes.
-
toByteString
Returns theByteStringrepresentation of this byte string builder. Subsequent changes to this byte string builder will not modify the returnedByteString.- Specified by:
toByteStringin interfaceByteSequence- Returns:
- The
ByteStringrepresentation of this byte sequence.
-
toString
Description copied from interface:ByteSequenceReturns the UTF-8 decoded string representation of this byte sequence. If UTF-8 decoding fails, the platform's default encoding will be used.- Specified by:
toStringin interfaceByteSequence- Overrides:
toStringin classObject- Returns:
- The string representation of this byte sequence.
-
trimToSize
Attempts to reduce storage used for this byte string builder. If the buffer is larger than necessary to hold its current sequence of bytes, then it may be resized to become more space efficient.- Returns:
- This byte string builder.
-