/* 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); }