Package org.apache.tomcat.util.codec.binary

## Class BaseNCodec

- java.lang.Object
- - org.apache.tomcat.util.codec.binary.BaseNCodec

Direct Known Subclasses:
  `Base64`

    public abstract class BaseNCodec
    extends Object

Abstract superclass for Base-N encoders and decoders.

This class is thread-safe.

### Field Summary

Fields
`protected int` `lineLength` Chunksize for encoding.
`protected static int` `MASK_8BITS` Mask used to extract 8 bits, used in decoding bytes
`static int` `MIME_CHUNK_SIZE` MIME chunk size per RFC 2045 section 6.8.
`protected byte` `pad` Pad byte.
`protected static byte` `PAD_DEFAULT` Byte used to pad output.
`protected static StringManager` `sm`

### Constructor Summary

Constructors
`protected` `BaseNCodec​(int unencodedBlockSize, int encodedBlockSize, int lineLength, int chunkSeparatorLength)` Note `lineLength` is rounded down to the nearest multiple of the encoded block size.
`protected` `BaseNCodec​(int unencodedBlockSize, int encodedBlockSize, int lineLength, int chunkSeparatorLength, byte pad)` Note `lineLength` is rounded down to the nearest multiple of the encoded block size.

### Method Summary

All Methods Instance Methods Abstract Methods Concrete Methods
`protected boolean` `containsAlphabetOrPad​(byte[] arrayOctet)` Tests a given byte array to see if it contains any characters within the alphabet or PAD.
`byte[]` `decode​(byte[] pArray)` Decodes a byte[] containing characters in the Base-N alphabet.
`byte[]` `decode​(byte[] pArray, int off, int len)`
`byte[]` `decode​(String pArray)` Decodes a String containing characters in the Base-N alphabet.
`byte[]` `encode​(byte[] pArray)` Encodes a byte[] containing binary data, into a byte[] containing characters in the alphabet.
`byte[]` `encode​(byte[] pArray, int offset, int length)` Encodes a byte[] containing binary data, into a byte[] containing characters in the alphabet.
`String` `encodeAsString​(byte[] pArray)` Encodes a byte[] containing binary data, into a String containing characters in the appropriate alphabet.
`protected byte[]` `ensureBufferSize​(int size, org.apache.tomcat.util.codec.binary.BaseNCodec.Context context)` Ensure that the buffer has room for `size` bytes
`protected int` `getDefaultBufferSize()` Get the default buffer size.
`long` `getEncodedLength​(byte[] pArray)` Calculates the amount of space needed to encode the supplied array.
`protected abstract boolean` `isInAlphabet​(byte value)` Returns whether or not the `octet` is in the current alphabet.

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Field Detail

#### sm

    protected static final StringManager sm

#### MIME_CHUNK_SIZE

    public static final int MIME_CHUNK_SIZE

MIME chunk size per RFC 2045 section 6.8.

The 76 character limit does not count the trailing CRLF, but counts all other characters, including any equal signs.

See Also:
  RFC 2045 section 6.8, Constant Field Values

#### MASK_8BITS

    protected static final int MASK_8BITS

Mask used to extract 8 bits, used in decoding bytes

See Also:
  Constant Field Values

#### PAD_DEFAULT

    protected static final byte PAD_DEFAULT

Byte used to pad output.

See Also:
  Constant Field Values

#### pad

    protected final byte pad

Pad byte. Instance variable just in case it needs to vary later.

#### lineLength

    protected final int lineLength

Chunksize for encoding. Not used when decoding. A value of zero or less implies no chunking of the encoded data. Rounded down to the nearest multiple of encodedBlockSize.

### Constructor Detail

#### BaseNCodec

    protected BaseNCodec​(int unencodedBlockSize,
                         int encodedBlockSize,
                         int lineLength,
                         int chunkSeparatorLength)

Note `lineLength` is rounded down to the nearest multiple of the encoded block size. If `chunkSeparatorLength` is zero, then chunking is disabled.

Parameters:
  `unencodedBlockSize` - the size of an unencoded block (e.g. Base64 = 3)
  `encodedBlockSize` - the size of an encoded block (e.g. Base64 = 4)
  `lineLength` - if > 0, use chunking with a length `lineLength`
  `chunkSeparatorLength` - the chunk separator length, if relevant

#### BaseNCodec

    protected BaseNCodec​(int unencodedBlockSize,
                         int encodedBlockSize,
                         int lineLength,
                         int chunkSeparatorLength,
                         byte pad)

Note `lineLength` is rounded down to the nearest multiple of the encoded block size. If `chunkSeparatorLength` is zero, then chunking is disabled.

Parameters:
  `unencodedBlockSize` - the size of an unencoded block (e.g. Base64 = 3)
  `encodedBlockSize` - the size of an encoded block (e.g. Base64 = 4)
  `lineLength` - if > 0, use chunking with a length `lineLength`
  `chunkSeparatorLength` - the chunk separator length, if relevant
  `pad` - byte used as padding byte.

### Method Detail

#### containsAlphabetOrPad

    protected boolean containsAlphabetOrPad​(byte[] arrayOctet)

Tests a given byte array to see if it contains any characters within the alphabet or PAD. Intended for use in checking line-ending arrays

Parameters:
  `arrayOctet` - byte array to test
Returns:
  `true` if any byte is a valid character in the alphabet or PAD; `false` otherwise

#### decode

    public byte[] decode​(byte[] pArray)

Decodes a byte[] containing characters in the Base-N alphabet.

Parameters:
  `pArray` - A byte array containing Base-N character data
Returns:
  a byte array containing binary data

#### decode

    public byte[] decode​(byte[] pArray,
                         int off,
                         int len)

#### decode

    public byte[] decode​(String pArray)

Decodes a String containing characters in the Base-N alphabet.

Parameters:
  `pArray` - A String containing Base-N character data
Returns:
  a byte array containing binary data

#### encode

    public byte[] encode​(byte[] pArray)

Encodes a byte[] containing binary data, into a byte[] containing characters in the alphabet.

Parameters:
  `pArray` - a byte array containing binary data
Returns:
  A byte array containing only the base N alphabetic character data

#### encode

    public byte[] encode​(byte[] pArray,
                         int offset,
                         int length)

Encodes a byte[] containing binary data, into a byte[] containing characters in the alphabet.

Parameters:
  `pArray` - a byte array containing binary data
  `offset` - initial offset of the subarray.
  `length` - length of the subarray.
Returns:
  A byte array containing only the base N alphabetic character data
Since:
  1.11

#### encodeAsString

    public String encodeAsString​(byte[] pArray)

Encodes a byte[] containing binary data, into a String containing characters in the appropriate alphabet. Uses UTF8 encoding.

Parameters:
  `pArray` - a byte array containing binary data
Returns:
  String containing only character data in the appropriate alphabet.
Since:
  1.5

#### ensureBufferSize

    protected byte[] ensureBufferSize​(int size,
                                      org.apache.tomcat.util.codec.binary.BaseNCodec.Context context)

Ensure that the buffer has room for `size` bytes

Parameters:
  `size` - minimum spare space required
  `context` - the context to be used
Returns:
  the buffer

#### getDefaultBufferSize

    protected int getDefaultBufferSize()

Get the default buffer size. Can be overridden.

Returns:
  the default buffer size.

#### getEncodedLength

    public long getEncodedLength​(byte[] pArray)

Calculates the amount of space needed to encode the supplied array.

Parameters:
  `pArray` - byte[] array which will later be encoded
Returns:
  amount of space needed to encode the supplied array. Returns a long since a max-len array will require > Integer.MAX_VALUE

#### isInAlphabet

    protected abstract boolean isInAlphabet​(byte value)

Returns whether or not the `octet` is in the current alphabet. Does not allow whitespace or pad.

Parameters:
  `value` - The value to test
Returns:
  `true` if the value is defined in the current alphabet, `false` otherwise.