Package org.apache.commons.codec.net
Class PercentCodec
java.lang.Object
org.apache.commons.codec.net.PercentCodec
- All Implemented Interfaces:
BinaryDecoder,BinaryEncoder,Decoder,Encoder
Implements the Percent-Encoding scheme, as described in HTTP 1.1 specification. For extensibility, an array of
special US-ASCII characters can be specified in order to perform proper URI encoding for the different parts
of the URI.
This class is immutable. It is also thread-safe besides using BitSet which is not thread-safe, but its public interface only call the access
- Since:
- 1.12
- See Also:
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate final BitSetThe bit set used to store the character that should be always encodedprivate intThe minimum and maximum code of the bytes that is inserted in the bit set, used to prevent look-upsprivate intThe minimum and maximum code of the bytes that is inserted in the bit set, used to prevent look-upsprivate static final byteThe escape character used by the Percent-Encoding in order to introduce an encoded character.private final booleanThe flag defining if the space character should be encoded as '+' -
Constructor Summary
ConstructorsConstructorDescriptionConstructs a Percent coded that will encode all the non US-ASCII characters using the Percent-Encoding while it will not encode all the US-ASCII characters, except for character '%' that is used as escape character for Percent-Encoding.PercentCodec(byte[] alwaysEncodeChars, boolean plusForSpace) Constructs a Percent codec by specifying the characters that belong to US-ASCII that should always be encoded. -
Method Summary
Modifier and TypeMethodDescriptionprivate booleancanEncode(byte c) private booleancontainsSpace(byte[] bytes) byte[]decode(byte[] bytes) Decode bytes encoded with Percent-Encoding based on RFC 3986.Decodes a byte[] Object, whose bytes are encoded with Percent-Encoding.private byte[]doEncode(byte[] bytes, int expectedLength, boolean willEncode) byte[]encode(byte[] bytes) Percent-Encoding based on RFC 3986.Encodes an object into using the Percent-Encoding.private intexpectedDecodingBytes(byte[] bytes) private intexpectedEncodingBytes(byte[] bytes) private booleaninAlwaysEncodeCharsRange(byte c) private voidinsertAlwaysEncodeChar(byte b) Inserts a single character into a BitSet and maintains the min and max of the characters of theBitSet alwaysEncodeCharsin order to avoid look-ups when a byte is out of this range.private voidinsertAlwaysEncodeChars(byte[] alwaysEncodeCharsArray) Adds the byte array into a BitSet for faster lookupprivate booleanisAsciiChar(byte c)
-
Field Details
-
ESCAPE_CHAR
private static final byte ESCAPE_CHARThe escape character used by the Percent-Encoding in order to introduce an encoded character.- See Also:
-
alwaysEncodeChars
The bit set used to store the character that should be always encoded -
plusForSpace
private final boolean plusForSpaceThe flag defining if the space character should be encoded as '+' -
alwaysEncodeCharsMin
private int alwaysEncodeCharsMinThe minimum and maximum code of the bytes that is inserted in the bit set, used to prevent look-ups -
alwaysEncodeCharsMax
private int alwaysEncodeCharsMaxThe minimum and maximum code of the bytes that is inserted in the bit set, used to prevent look-ups
-
-
Constructor Details
-
PercentCodec
public PercentCodec()Constructs a Percent coded that will encode all the non US-ASCII characters using the Percent-Encoding while it will not encode all the US-ASCII characters, except for character '%' that is used as escape character for Percent-Encoding. -
PercentCodec
public PercentCodec(byte[] alwaysEncodeChars, boolean plusForSpace) Constructs a Percent codec by specifying the characters that belong to US-ASCII that should always be encoded. The rest US-ASCII characters will not be encoded, except for character '%' that is used as escape character for Percent-Encoding.- Parameters:
alwaysEncodeChars- the unsafe characters that should always be encodedplusForSpace- the flag defining if the space character should be encoded as '+'
-
-
Method Details
-
insertAlwaysEncodeChars
private void insertAlwaysEncodeChars(byte[] alwaysEncodeCharsArray) Adds the byte array into a BitSet for faster lookup- Parameters:
alwaysEncodeCharsArray-
-
insertAlwaysEncodeChar
private void insertAlwaysEncodeChar(byte b) Inserts a single character into a BitSet and maintains the min and max of the characters of theBitSet alwaysEncodeCharsin order to avoid look-ups when a byte is out of this range.- Parameters:
b- the byte that is candidate for min and max limit
-
encode
Percent-Encoding based on RFC 3986. The non US-ASCII characters are encoded, as well as the US-ASCII characters that are configured to be always encoded.- Specified by:
encodein interfaceBinaryEncoder- Parameters:
bytes- Data to be encoded- Returns:
- A byte array containing the encoded data
- Throws:
EncoderException- thrown if the Encoder encounters a failure condition during the encoding process.
-
doEncode
private byte[] doEncode(byte[] bytes, int expectedLength, boolean willEncode) -
expectedEncodingBytes
private int expectedEncodingBytes(byte[] bytes) -
containsSpace
private boolean containsSpace(byte[] bytes) -
canEncode
private boolean canEncode(byte c) -
inAlwaysEncodeCharsRange
private boolean inAlwaysEncodeCharsRange(byte c) -
isAsciiChar
private boolean isAsciiChar(byte c) -
decode
Decode bytes encoded with Percent-Encoding based on RFC 3986. The reverse process is performed in order to decode the encoded characters to Unicode.- Specified by:
decodein interfaceBinaryDecoder- Parameters:
bytes- A byte array which has been encoded with the appropriate encoder- Returns:
- a byte array that contains decoded content
- Throws:
DecoderException- A decoder exception is thrown if a Decoder encounters a failure condition during the decode process.
-
expectedDecodingBytes
private int expectedDecodingBytes(byte[] bytes) -
encode
Encodes an object into using the Percent-Encoding. Only byte[] objects are accepted.- Specified by:
encodein interfaceEncoder- Parameters:
obj- the object to encode- Returns:
- the encoding result byte[] as Object
- Throws:
EncoderException- if the object is not a byte array
-
decode
Decodes a byte[] Object, whose bytes are encoded with Percent-Encoding.- Specified by:
decodein interfaceDecoder- Parameters:
obj- the object to decode- Returns:
- the decoding result byte[] as Object
- Throws:
DecoderException- if the object is not a byte array
-