Package org.apache.commons.io.input

# Class ProxyReader

java.lang.Object
java.io.Reader
java.io.FilterReader
org.apache.commons.io.input.ProxyReader

All Implemented Interfaces:
  `Closeable`, `AutoCloseable`, `Readable`

Direct Known Subclasses:
  `BoundedReader`, `CloseShieldReader`, `TaggedReader`, `TeeReader`

public abstract class ProxyReader extends FilterReader
A reader proxy which delegates to the wrapped reader.

It is an alternative base class to FilterReader to increase reusability, because FilterReader changes the methods being called, such as read(char[]) to read(char[], int, int).

- ## Field Summary

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

  `in`

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

  `lock`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `ProxyReader(Reader delegate)`
  Constructs a new ProxyReader.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `protected void`
  `afterRead(int n)`
  Invoked by the read methods after the proxied call has returned successfully.
  `protected void`
  `beforeRead(int n)`
  Invoked by the read methods before the call is proxied.
  `void`
  `close()`
  Invokes the delegate's `close()` method.
  `protected void`
  `handleIOException(IOException e)`
  Handle any IOExceptions thrown.
  `void`
  `mark(int readAheadLimit)`
  Invokes the delegate's `mark(int)` method.
  `boolean`
  `markSupported()`
  Invokes the delegate's `markSupported()` method.
  `int`
  `read()`
  Invokes the delegate's `read()` method.
  `int`
  `read(char[] chr)`
  Invokes the delegate's `read(char[])` method.
  `int`
  `read(char[] chr, int st, int len)`
  Invokes the delegate's `read(char[], int, int)` method.
  `int`
  `read(CharBuffer target)`
  Invokes the delegate's `read(CharBuffer)` method.
  `boolean`
  `ready()`
  Invokes the delegate's `ready()` method.
  `void`
  `reset()`
  Invokes the delegate's `reset()` method.
  `ProxyReader`
  `setReference(Reader in)`
  Sets the underlying reader.
  `long`
  `skip(long ln)`
  Invokes the delegate's `skip(long)` method.
  `Reader`
  `unwrap()`
  Unwraps this instance by returning the underlying `Reader`.

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

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

- ## Constructor Details

  - ### ProxyReader

    public ProxyReader(Reader delegate)
    Constructs a new ProxyReader.
    Parameters:
      `delegate` - the Reader to delegate to.

- ## Method Details

  - ### afterRead

    protected void afterRead(int n) throws IOException
    Invoked by the read methods after the proxied call has returned successfully. The number of chars returned to the caller (or -1 if the end of stream was reached) is given as an argument.

    Subclasses can override this method to add common post-processing functionality without having to override all the read methods. The default implementation does nothing.

    Note this method is not called from `skip(long)` or `reset()`. You need to explicitly override those methods if you want to add post-processing steps also to them.

    Parameters:
      `n` - number of chars read, or -1 if the end of stream was reached.
    Throws:
      `IOException` - if the post-processing fails.
    Since:
      2.0

  - ### beforeRead

    protected void beforeRead(int n) throws IOException
    Invoked by the read methods before the call is proxied. The number of chars that the caller wanted to read (1 for the `read()` method, buffer length for `read(char[])`, etc.) is given as an argument.

    Subclasses can override this method to add common pre-processing functionality without having to override all the read methods. The default implementation does nothing.

    Note this method is not called from `skip(long)` or `reset()`. You need to explicitly override those methods if you want to add pre-processing steps also to them.

    Parameters:
      `n` - number of chars that the caller asked to be read.
    Throws:
      `IOException` - if the pre-processing fails.
    Since:
      2.0

  - ### close

    public void close() throws IOException
    Invokes the delegate's `close()` method.
    Specified by:
      `close` in interface `AutoCloseable`
    Specified by:
      `close` in interface `Closeable`
    Overrides:
      `close` in class `FilterReader`
    Throws:
      `IOException` - if an I/O error occurs.

  - ### handleIOException

    protected void handleIOException(IOException e) throws IOException
    Handle any IOExceptions thrown.

    This method provides a point to implement custom exception handling. The default behavior is to re-throw the exception.

    Parameters:
      `e` - The IOException thrown.
    Throws:
      `IOException` - if an I/O error occurs.
    Since:
      2.0

  - ### mark

    public void mark(int readAheadLimit) throws IOException
    Invokes the delegate's `mark(int)` method.
    Overrides:
      `mark` in class `FilterReader`
    Parameters:
      `readAheadLimit` - read ahead limit.
    Throws:
      `IOException` - if an I/O error occurs.

  - ### markSupported

    public boolean markSupported()
    Invokes the delegate's `markSupported()` method.
    Overrides:
      `markSupported` in class `FilterReader`
    Returns:
      true if mark is supported, otherwise false.

  - ### read

    public int read() throws IOException
    Invokes the delegate's `read()` method.
    Overrides:
      `read` in class `FilterReader`
    Returns:
      the character read or -1 if the end of stream.
    Throws:
      `IOException` - if an I/O error occurs.

  - ### read

    public int read(char[] chr) throws IOException
    Invokes the delegate's `read(char[])` method.
    Overrides:
      `read` in class `Reader`
    Parameters:
      `chr` - the buffer to read the characters into.
    Returns:
      the number of characters read or -1 if the end of stream.
    Throws:
      `IOException` - if an I/O error occurs.

  - ### read

    public int read(char[] chr, int st, int len) throws IOException
    Invokes the delegate's `read(char[], int, int)` method.
    Overrides:
      `read` in class `FilterReader`
    Parameters:
      `chr` - the buffer to read the characters into.
      `st` - The start offset.
      `len` - The number of bytes to read.
    Returns:
      the number of characters read or -1 if the end of stream.
    Throws:
      `IOException` - if an I/O error occurs.

  - ### read

    public int read(CharBuffer target) throws IOException
    Invokes the delegate's `read(CharBuffer)` method.
    Specified by:
      `read` in interface `Readable`
    Overrides:
      `read` in class `Reader`
    Parameters:
      `target` - the char buffer to read the characters into.
    Returns:
      the number of characters read or -1 if the end of stream.
    Throws:
      `IOException` - if an I/O error occurs.
    Since:
      2.0

  - ### ready

    public boolean ready() throws IOException
    Invokes the delegate's `ready()` method.
    Overrides:
      `ready` in class `FilterReader`
    Returns:
      true if the stream is ready to be read.
    Throws:
      `IOException` - if an I/O error occurs.

  - ### reset

    public void reset() throws IOException
    Invokes the delegate's `reset()` method.
    Overrides:
      `reset` in class `FilterReader`
    Throws:
      `IOException` - if an I/O error occurs.

  - ### setReference

    public ProxyReader setReference(Reader in)
    Sets the underlying reader.

    Use with caution.

    Parameters:
      `in` - The input stream to set in `java.io.Reader#in`.
    Returns:
      `this` instance.
    Since:
      2.22.0

  - ### skip

    public long skip(long ln) throws IOException
    Invokes the delegate's `skip(long)` method.
    Overrides:
      `skip` in class `FilterReader`
    Parameters:
      `ln` - the number of bytes to skip.
    Returns:
      the number of bytes to skipped or EOF if the end of stream.
    Throws:
      `IOException` - if an I/O error occurs.

  - ### unwrap

    public Reader unwrap()
    Unwraps this instance by returning the underlying `Reader`.

    Use with caution.

    Returns:
      the underlying `Reader`.
    Since:
      2.22.0