Package org.apache.lucene.util
Class IndexableBinaryStringTools
- java.lang.Object
-
- org.apache.lucene.util.IndexableBinaryStringTools
-
public final class IndexableBinaryStringTools extends Object
Provides support for converting byte sequences to Strings and back again. The resulting Strings preserve the original byte sequences' sort order. The Strings are constructed using a Base 8000h encoding of the original binary data - each char of an encoded String represents a 15-bit chunk from the byte sequence. Base 8000h was chosen because it allows for all lower 15 bits of char to be used without restriction; the surrogate range [U+D8000-U+DFFF] does not represent valid chars, and would require complicated handling to avoid them and allow use of char's high bit. Although unset bits are used as padding in the final char, the original byte sequence could contain trailing bytes with no set bits (null bytes): padding is indistinguishable from valid information. To overcome this problem, a char is appended, indicating the number of encoded bytes in the final content char. Some methods in this class are defined over CharBuffers and ByteBuffers, but these are deprecated in favor of methods that operate directly on byte[] and char[] arrays. Note that this class calls array() and arrayOffset() on the CharBuffers and ByteBuffers it uses, so only wrapped arrays may be used. This class interprets the arrayOffset() and limit() values returned by its input buffers as beginning and end+1 positions on the wrapped array, respectively; similarly, on the output buffer, arrayOffset() is the first position written to, and limit() is set to one past the final output array position. WARNING: This means that the deprecated Buffer-based methods only work correctly with buffers that have an offset of 0. For example, they will not correctly interpret buffers returned byByteBuffer.slice()
.- WARNING: This API is experimental and might change in incompatible ways in the next release.
-
-
Method Summary
All Methods Static Methods Concrete Methods Deprecated Methods Modifier and Type Method Description static void
decode(char[] inputArray, int inputOffset, int inputLength, byte[] outputArray, int outputOffset, int outputLength)
Decodes the input char sequence into the output byte sequence.static ByteBuffer
decode(CharBuffer input)
Deprecated.Usedecode(char[], int, int, byte[], int, int)
instead.static void
decode(CharBuffer input, ByteBuffer output)
Deprecated.Usedecode(char[], int, int, byte[], int, int)
instead.static void
encode(byte[] inputArray, int inputOffset, int inputLength, char[] outputArray, int outputOffset, int outputLength)
Encodes the input byte sequence into the output char sequence.static CharBuffer
encode(ByteBuffer input)
Deprecated.Useencode(byte[], int, int, char[], int, int)
instead.static void
encode(ByteBuffer input, CharBuffer output)
Deprecated.Useencode(byte[], int, int, char[], int, int)
instead.static int
getDecodedLength(char[] encoded, int offset, int length)
Returns the number of bytes required to decode the given char sequence.static int
getDecodedLength(CharBuffer encoded)
Deprecated.UsegetDecodedLength(char[], int, int)
instead.static int
getEncodedLength(byte[] inputArray, int inputOffset, int inputLength)
Returns the number of chars required to encode the given bytes.static int
getEncodedLength(ByteBuffer original)
Deprecated.UsegetEncodedLength(byte[], int, int)
instead.
-
-
-
Method Detail
-
getEncodedLength
@Deprecated public static int getEncodedLength(ByteBuffer original) throws IllegalArgumentException
Deprecated.UsegetEncodedLength(byte[], int, int)
instead. This method will be removed in Lucene 4.0Returns the number of chars required to encode the given byte sequence.- Parameters:
original
- The byte sequence to be encoded. Must be backed by an array.- Returns:
- The number of chars required to encode the given byte sequence
- Throws:
IllegalArgumentException
- If the given ByteBuffer is not backed by an array
-
getEncodedLength
public static int getEncodedLength(byte[] inputArray, int inputOffset, int inputLength)
Returns the number of chars required to encode the given bytes.- Parameters:
inputArray
- byte sequence to be encodedinputOffset
- initial offset into inputArrayinputLength
- number of bytes in inputArray- Returns:
- The number of chars required to encode the number of bytes.
-
getDecodedLength
@Deprecated public static int getDecodedLength(CharBuffer encoded) throws IllegalArgumentException
Deprecated.UsegetDecodedLength(char[], int, int)
instead. This method will be removed in Lucene 4.0Returns the number of bytes required to decode the given char sequence.- Parameters:
encoded
- The char sequence to be decoded. Must be backed by an array.- Returns:
- The number of bytes required to decode the given char sequence
- Throws:
IllegalArgumentException
- If the given CharBuffer is not backed by an array
-
getDecodedLength
public static int getDecodedLength(char[] encoded, int offset, int length)
Returns the number of bytes required to decode the given char sequence.- Parameters:
encoded
- char sequence to be decodedoffset
- initial offsetlength
- number of characters- Returns:
- The number of bytes required to decode the given char sequence
-
encode
@Deprecated public static void encode(ByteBuffer input, CharBuffer output)
Deprecated.Useencode(byte[], int, int, char[], int, int)
instead. This method will be removed in Lucene 4.0Encodes the input byte sequence into the output char sequence. Before calling this method, ensure that the output CharBuffer has sufficient capacity by callinggetEncodedLength(java.nio.ByteBuffer)
.- Parameters:
input
- The byte sequence to encodeoutput
- Where the char sequence encoding result will go. The limit is set to one past the position of the final char.- Throws:
IllegalArgumentException
- If either the input or the output buffer is not backed by an array
-
encode
public static void encode(byte[] inputArray, int inputOffset, int inputLength, char[] outputArray, int outputOffset, int outputLength)
Encodes the input byte sequence into the output char sequence. Before calling this method, ensure that the output array has sufficient capacity by callinggetEncodedLength(byte[], int, int)
.- Parameters:
inputArray
- byte sequence to be encodedinputOffset
- initial offset into inputArrayinputLength
- number of bytes in inputArrayoutputArray
- char sequence to store encoded resultoutputOffset
- initial offset into outputArrayoutputLength
- length of output, must be getEncodedLength
-
decode
@Deprecated public static void decode(CharBuffer input, ByteBuffer output)
Deprecated.Usedecode(char[], int, int, byte[], int, int)
instead. This method will be removed in Lucene 4.0Decodes the input char sequence into the output byte sequence. Before calling this method, ensure that the output ByteBuffer has sufficient capacity by callinggetDecodedLength(java.nio.CharBuffer)
.- Parameters:
input
- The char sequence to decodeoutput
- Where the byte sequence decoding result will go. The limit is set to one past the position of the final char.- Throws:
IllegalArgumentException
- If either the input or the output buffer is not backed by an array
-
decode
public static void decode(char[] inputArray, int inputOffset, int inputLength, byte[] outputArray, int outputOffset, int outputLength)
Decodes the input char sequence into the output byte sequence. Before calling this method, ensure that the output array has sufficient capacity by callinggetDecodedLength(char[], int, int)
.- Parameters:
inputArray
- char sequence to be decodedinputOffset
- initial offset into inputArrayinputLength
- number of chars in inputArrayoutputArray
- byte sequence to store encoded resultoutputOffset
- initial offset into outputArrayoutputLength
- length of output, must be getDecodedLength(inputArray, inputOffset, inputLength)
-
decode
@Deprecated public static ByteBuffer decode(CharBuffer input)
Deprecated.Usedecode(char[], int, int, byte[], int, int)
instead. This method will be removed in Lucene 4.0Decodes the given char sequence, which must have been encoded byencode(java.nio.ByteBuffer)
orencode(java.nio.ByteBuffer, java.nio.CharBuffer)
.- Parameters:
input
- The char sequence to decode- Returns:
- A byte sequence containing the decoding result. The limit is set to one past the position of the final char.
- Throws:
IllegalArgumentException
- If the input buffer is not backed by an array
-
encode
@Deprecated public static CharBuffer encode(ByteBuffer input)
Deprecated.Useencode(byte[], int, int, char[], int, int)
instead. This method will be removed in Lucene 4.0Encodes the input byte sequence.- Parameters:
input
- The byte sequence to encode- Returns:
- A char sequence containing the encoding result. The limit is set to one past the position of the final char.
- Throws:
IllegalArgumentException
- If the input buffer is not backed by an array
-
-