Package com.sun.mail.util

# Class QPDecoderStream

java.lang.Object
java.io.InputStream
java.io.FilterInputStream
com.sun.mail.util.QPDecoderStream

All Implemented Interfaces:
  `Closeable`, `AutoCloseable`

Direct Known Subclasses:
  `QDecoderStream`

public class QPDecoderStream extends FilterInputStream
This class implements a QP 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

## Field Summary

Fields
Modifier and Type
Field
Description
`protected byte[]`
`ba`
`protected int`
`spaces`

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

`in`

## Constructor Summary

Constructors
Constructor
Description
`QPDecoderStream(InputStream in)`
Create a Quoted Printable decoder that decodes the specified input stream.

## Method Summary

Modifier and Type
Method
Description
`int`
`available()`
Returns the number of bytes that can be read from this input stream without blocking.
`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, skipNBytes, transferTo`

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

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

## Field Details

### ba

protected byte[] ba

### spaces

protected int spaces

## Constructor Details

### QPDecoderStream

public QPDecoderStream(InputStream in)
Create a Quoted Printable decoder that decodes the specified input stream.

Parameters:
  `in` - the input stream

## Method Details

### read

public int read() throws 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 `FilterInputStream`
Returns:
  the next byte of data, or `-1` if the end of the stream is reached.
Throws:
  `IOException` - if an I/O error occurs.

### read

public int read(byte[] buf, int off, int len) throws 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 `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:
  `IOException` - if an I/O error occurs.

### skip

public long skip(long n) throws IOException
Skips over and discards n bytes of data from this stream.

Overrides:
  `skip` in class `FilterInputStream`
Throws:
  `IOException`

### markSupported

public boolean markSupported()
Tests if this input stream supports marks. Currently this class does not support marks

Overrides:
  `markSupported` in class `FilterInputStream`

### available

public int available() throws IOException
Returns the number of bytes that can be read from this input stream without blocking. The QP algorithm does not permit a priori knowledge of the number of bytes after decoding, so this method just invokes the `available` method of the original input stream.

Overrides:
  `available` in class `FilterInputStream`
Throws:
  `IOException`