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
Modifier and Type
Field
Description
`protected final int`
`lineLength`
Chunksize for encoding.
`protected static final int`
`MASK_8BITS`
Mask used to extract 8 bits, used in decoding bytes
`static final int`
`MIME_CHUNK_SIZE`
MIME chunk size per RFC 2045 section 6.8.
`protected final byte`
`pad`
Pad byte.
`protected static final byte`
`PAD_DEFAULT`
Byte used to pad output.
`protected static final StringManager`
`sm`

## Constructor Summary

Constructors
Modifier
Constructor
Description
`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

Modifier and Type
Method
Description
`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 Details

### 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 Details

### 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 Details

### 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.