/* See LICENSE for licensing and NOTICE for copyright. */
package org.cryptacular.codec;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import org.cryptacular.EncodingException;
/**
* Describes a potentially stateful character-to-byte decoder.
*
* @author Middleware Services
*/
public interface Decoder
{
/**
* Decodes characters in input buffer into bytes placed in the output buffer. This method may be called multiple
* times, followed by {@link #finalize(ByteBuffer)}. after all input bytes have been provided.
*
* @param input Input character buffer.
* @param output Output byte buffer.
*
* @throws EncodingException on decoding errors.
*/
void decode(CharBuffer input, ByteBuffer output) throws EncodingException;
/**
* Performs final output decoding (e.g. padding) after all input characters have been provided.
*
* @param output Output byte buffer.
*
* @throws EncodingException on decoding errors.
*/
void finalize(ByteBuffer output) throws EncodingException;
/**
* Expected number of bytes in the output buffer for an input buffer of the given size.
*
* @param inputSize Size of input buffer in characters.
*
* @return Minimum byte buffer size required to store all decoded characters in input buffer.
*/
int outputSize(int inputSize);
}