/* 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 byte-to-character encoder.
*
* @author Middleware Services
*/
public interface Encoder
{
/**
* Encodes bytes in input buffer into characters placed in the output buffer. This method may be called multiple
* times, followed by {@link #finalize(java.nio.CharBuffer)} after all input bytes have been provided.
*
* @param input Input byte buffer.
* @param output Output character buffer.
*
* @throws EncodingException on encoding errors.
*/
void encode(ByteBuffer input, CharBuffer output) throws EncodingException;
/**
* Performs final output encoding (e.g. padding) after all input bytes have been provided.
*
* @param output Output character buffer.
*
* @throws EncodingException on encoding errors.
*/
void finalize(CharBuffer output) throws EncodingException;
/**
* Expected number of characters in the output buffer for an input buffer of the given size.
*
* @param inputSize Size of input buffer in bytes.
*
* @return Minimum character buffer size required to store all encoded input bytes.
*/
int outputSize(int inputSize);
}