Package com.sun.mail.util

## Class BASE64DecoderStream

- java.lang.Object
- - java.io.InputStream
  - - java.io.FilterInputStream
    - - com.sun.mail.util.BASE64DecoderStream

All Implemented Interfaces:
  `java.io.Closeable`, `java.lang.AutoCloseable`

    public class BASE64DecoderStream
    extends java.io.FilterInputStream

This class implements a BASE64 Decoder. It is implemented as a FilterInputStream, so one can just wrap this class around any input stream and read bytes from this filter. The decoding is done as the bytes are read out.

Author:
  John Mani, Bill Shannon

### Field Summary

### Fields inherited from class java.io.FilterInputStream

`in`

### Constructor Summary

Constructors
`BASE64DecoderStream​(java.io.InputStream in)` Create a BASE64 decoder that decodes the specified input stream.
`BASE64DecoderStream​(java.io.InputStream in, boolean ignoreErrors)` Create a BASE64 decoder that decodes the specified input stream.

### Method Summary

All Methods Static Methods Instance Methods Concrete Methods
`int` `available()` Returns the number of bytes that can be read from this input stream without blocking.
`static byte[]` `decode​(byte[] inbuf)` Base64 decode a byte array.
`boolean` `markSupported()` Tests if this input stream supports marks.
`int` `read()` Read the next decoded byte from this input stream.
`int` `read​(byte[] buf, int off, int len)` Reads up to `len` decoded bytes of data from this input stream into an array of bytes.
`long` `skip​(long n)` Skips over and discards n bytes of data from this stream.

### Methods inherited from class java.io.FilterInputStream

`close, mark, read, reset`

### Methods inherited from class java.io.InputStream

`nullInputStream, readAllBytes, readNBytes, readNBytes, transferTo`

### Methods inherited from class java.lang.Object

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

### Constructor Detail

#### BASE64DecoderStream

    public BASE64DecoderStream​(java.io.InputStream in)

Create a BASE64 decoder that decodes the specified input stream. The System property `mail.mime.base64.ignoreerrors` controls whether errors in the encoded data cause an exception or are ignored. The default is false (errors cause exception).

Parameters:
  `in` - the input stream

#### BASE64DecoderStream

    public BASE64DecoderStream​(java.io.InputStream in,
                               boolean ignoreErrors)

Create a BASE64 decoder that decodes the specified input stream.

Parameters:
  `in` - the input stream
  `ignoreErrors` - ignore errors in encoded data?

### Method Detail

#### read

    public int read()
             throws java.io.IOException

Read the next decoded byte from this input stream. The byte is returned as an `int` in the range `0` to `255`. If no byte is available because the end of the stream has been reached, the value `-1` is returned. This method blocks until input data is available, the end of the stream is detected, or an exception is thrown.

Overrides:
  `read` in class `java.io.FilterInputStream`
Returns:
  next byte of data, or `-1` if the end of the stream is reached.
Throws:
  `java.io.IOException` - if an I/O error occurs.
See Also:
  `FilterInputStream.in`

#### read

    public int read​(byte[] buf,
                    int off,
                    int len)
             throws java.io.IOException

Reads up to `len` decoded bytes of data from this input stream into an array of bytes. This method blocks until some input is available.

Overrides:
  `read` in class `java.io.FilterInputStream`
Parameters:
  `buf` - the buffer into which the data is read.
  `off` - the start offset of the data.
  `len` - the maximum number of bytes read.
Returns:
  the total number of bytes read into the buffer, or `-1` if there is no more data because the end of the stream has been reached.
Throws:
  `java.io.IOException` - if an I/O error occurs.

#### skip

    public long skip​(long n)
              throws java.io.IOException

Skips over and discards n bytes of data from this stream.

Overrides:
  `skip` in class `java.io.FilterInputStream`
Throws:
  `java.io.IOException`

#### markSupported

    public boolean markSupported()

Tests if this input stream supports marks. Currently this class does not support marks

Overrides:
  `markSupported` in class `java.io.FilterInputStream`

#### available

    public int available()
                  throws java.io.IOException

Returns the number of bytes that can be read from this input stream without blocking. However, this figure is only a close approximation in case the original encoded stream contains embedded CRLFs; since the CRLFs are discarded, not decoded

Overrides:
  `available` in class `java.io.FilterInputStream`
Throws:
  `java.io.IOException`

#### decode

    public static byte[] decode​(byte[] inbuf)

Base64 decode a byte array. No line breaks are allowed. This method is suitable for short strings, such as those in the IMAP AUTHENTICATE protocol, but not to decode the entire content of a MIME part. NOTE: inbuf may only contain valid base64 characters. Whitespace is not ignored.

Parameters:
  `inbuf` - the byte array
Returns:
  the decoded byte array