# Class BaseNCodecInputStream<C extends BaseNCodec, T extends BaseNCodecInputStream<C,T,B>, B extends BaseNCodecInputStream.AbstracBuilder<T,C,B>>

java.lang.Object
java.io.InputStream
java.io.FilterInputStream
org.apache.commons.codec.binary.BaseNCodecInputStream<C,T,B>

Type Parameters:
  `C` - A BaseNCodec subclass.
  `T` - A BaseNCodecInputStream subclass.
  `B` - A subclass.

All Implemented Interfaces:
  `Closeable, AutoCloseable`

Direct Known Subclasses:
  `Base16InputStream, Base32InputStream, Base64InputStream`

public class BaseNCodecInputStream<C extends BaseNCodec, T extends BaseNCodecInputStream<C,T,B>, B extends BaseNCodecInputStream.AbstracBuilder<T,C,B>> extends FilterInputStream
Abstracts Base-N input streams.

Since:
  1.5
See Also:
  - `Base16InputStream`
  - `Base32InputStream`
  - `Base64InputStream`

- ## Nested Class Summary

  Nested Classes
  Modifier and Type
  Class
  Description
  `static class`
  `BaseNCodecInputStream.AbstracBuilder<T, C extends BaseNCodec, B extends AbstractBaseNCodecStreamBuilder<T,C,B>>`
  Builds input stream instances in `BaseNCodec` format.

- ## Field Summary

  ### Fields inherited from class FilterInputStream

  `in`

- ## Constructor Summary

  Constructors
  Modifier
  Constructor
  Description
  `protected`
  `BaseNCodecInputStream(InputStream inputStream, C baseNCodec, boolean doEncode)`
  Constructs a new instance.
  `protected`
  `BaseNCodecInputStream(BaseNCodecInputStream.AbstracBuilder<T,C,B> builder)`
  Constructs a new instance.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `int`
  `available()`
  `boolean`
  `isStrictDecoding()`
  Returns true if decoding behavior is strict.
  `void`
  `mark(int readLimit)`
  Marks the current position in this input stream.
  `boolean`
  `markSupported()`
  `int`
  `read()`
  Reads one `byte` from this input stream.
  `int`
  `read(byte[] array, int offset, int len)`
  Attempts to read `len` bytes into the specified `b` array starting at `offset` from this InputStream.
  `void`
  `reset()`
  Repositions this stream to the position at the time the mark method was last called on this input stream.
  `long`
  `skip(long n)`

  ### Methods inherited from class FilterInputStream

  `close, read`

  ### Methods inherited from class Object

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

- ## Constructor Details

  - ### BaseNCodecInputStream

    protected BaseNCodecInputStream(BaseNCodecInputStream.AbstracBuilder<T,C,B> builder)
    Constructs a new instance.
    Parameters:
      `builder` - A builder.
    Since:
      1.20.0

  - ### BaseNCodecInputStream

    protected BaseNCodecInputStream(InputStream inputStream, C baseNCodec, boolean doEncode)
    Constructs a new instance.
    Parameters:
      `inputStream` - the input stream.
      `baseNCodec` - the codec.
      `doEncode` - set to true to perform encoding, else decoding.

- ## Method Details

  - ### available

    public int available() throws IOException
    Overrides:
      `available` in class `FilterInputStream`
    Returns:
      `0` if the `InputStream` has reached `EOF`, `1` otherwise.
    Throws:
      `IOException`
    Since:
      1.7

  - ### isStrictDecoding

    public boolean isStrictDecoding()
    Returns true if decoding behavior is strict. Decoding will raise an `IllegalArgumentException` if trailing bits are not part of a valid encoding.

    The default is false for lenient encoding. Decoding will compose trailing bits into 8-bit bytes and discard the remainder.

    Returns:
      true if using strict decoding.
    Since:
      1.15

  - ### mark

    public void mark(int readLimit)
    Marks the current position in this input stream.

    The `mark(int)` method of `BaseNCodecInputStream` does nothing.

    Overrides:
      `mark` in class `FilterInputStream`
    Parameters:
      `readLimit` - the maximum limit of bytes that can be read before the mark position becomes invalid.
    Since:
      1.7
    See Also:
      - `markSupported()`

  - ### markSupported

    public boolean markSupported()
    Overrides:
      `markSupported` in class `FilterInputStream`
    Returns:
      Always returns `false`

  - ### read

    public int read() throws IOException
    Reads one `byte` from this input stream.
    Overrides:
      `read` in class `FilterInputStream`
    Returns:
      the byte as an integer in the range 0 to 255. Returns -1 if EOF has been reached.
    Throws:
      `IOException` - if an I/O error occurs.

  - ### read

    public int read(byte[] array, int offset, int len) throws IOException
    Attempts to read `len` bytes into the specified `b` array starting at `offset` from this InputStream.
    Overrides:
      `read` in class `FilterInputStream`
    Parameters:
      `array` - destination byte array.
      `offset` - where to start writing the bytes.
      `len` - maximum number of bytes to read.
    Returns:
      number of bytes read.
    Throws:
      `IOException` - if an I/O error occurs.
      `NullPointerException` - if the byte array parameter is null.
      `IndexOutOfBoundsException` - if offset, len or buffer size are invalid.

  - ### reset

    public void reset() throws IOException
    Repositions this stream to the position at the time the mark method was last called on this input stream.

    The `reset()` method of `BaseNCodecInputStream` does nothing except throw an `IOException`.

    Overrides:
      `reset` in class `FilterInputStream`
    Throws:
      `IOException` - if this method is invoked.
    Since:
      1.7

  - ### skip

    public long skip(long n) throws IOException
    Overrides:
      `skip` in class `FilterInputStream`
    Throws:
      `IllegalArgumentException` - if the provided skip length is negative.
      `IOException`
    Since:
      1.7