Class PercentCodec

  • All Implemented Interfaces:
    BinaryDecoder, BinaryEncoder, Decoder, Encoder

    public class PercentCodec
    extends java.lang.Object
    implements BinaryEncoder, BinaryDecoder
    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:
    Percent-Encoding
    • Constructor Summary

      Constructors 
      Constructor Description
      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​(byte[] alwaysEncodeChars, boolean plusForSpace)
      Constructs a Percent codec by specifying the characters that belong to US-ASCII that should always be encoded.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      byte[] decode​(byte[] bytes)
      Decode bytes encoded with Percent-Encoding based on RFC 3986.
      java.lang.Object decode​(java.lang.Object obj)
      Decodes a byte[] Object, whose bytes are encoded with Percent-Encoding.
      byte[] encode​(byte[] bytes)
      Percent-Encoding based on RFC 3986.
      java.lang.Object encode​(java.lang.Object obj)
      Encodes an object into using the Percent-Encoding.
      • Methods inherited from class java.lang.Object

        equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Constructor Detail

      • 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 encoded
        plusForSpace - the flag defining if the space character should be encoded as '+'
    • Method Detail

      • encode

        public byte[] encode​(byte[] bytes)
                      throws EncoderException
        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:
        encode in interface BinaryEncoder
        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.
      • decode

        public byte[] decode​(byte[] bytes)
                      throws DecoderException
        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:
        decode in interface BinaryDecoder
        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.
      • encode

        public java.lang.Object encode​(java.lang.Object obj)
                                throws EncoderException
        Encodes an object into using the Percent-Encoding. Only byte[] objects are accepted.
        Specified by:
        encode in interface Encoder
        Parameters:
        obj - the object to encode
        Returns:
        the encoding result byte[] as Object
        Throws:
        EncoderException - if the object is not a byte array
      • decode

        public java.lang.Object decode​(java.lang.Object obj)
                                throws DecoderException
        Decodes a byte[] Object, whose bytes are encoded with Percent-Encoding.
        Specified by:
        decode in interface Decoder
        Parameters:
        obj - the object to decode
        Returns:
        the decoding result byte[] as Object
        Throws:
        DecoderException - if the object is not a byte array