# Class StringReader

java.lang.Object
java.io.Reader
java.io.StringReader

All Implemented Interfaces:
  `AutoCloseable`

public class StringReader extends Reader

A specialized `Reader` that reads characters from a `String` in a sequential manner.

##### See also

- StringWriter

- ## Field Summary

  ### Fields inherited from class Reader

  `lock`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `StringReader(String str)`
  Construct a new `StringReader` with `str` as source.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `void`
  `close()`
  Closes this reader.
  `void`
  `mark(int readLimit)`
  Sets a mark position in this reader.
  `boolean`
  `markSupported()`
  Indicates whether this reader supports the `mark()` and `reset()` methods.
  `int`
  `read()`
  Reads a single character from the source string and returns it as an integer with the two higher-order bytes set to 0.
  `int`
  `read(char[] buf, int offset, int len)`
  Reads at most `len` characters from the source string and stores them at `offset` in the character array `buf`.
  `boolean`
  `ready()`
  Indicates whether this reader is ready to be read without blocking.
  `void`
  `reset()`
  Resets this reader's position to the last `mark()` location.
  `long`
  `skip(long ns)`
  Moves `ns` characters in the source string.

  ### Methods inherited from class Reader

  `read`

  ### Methods inherited from class Object

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

- ## Constructor Details

  - ### StringReader

    public StringReader(String str)

    Construct a new `StringReader` with `str` as source. The size of the reader is set to the `length()` of the string and the Object to synchronize access through is set to `str`.

    ###### Parameters

    - `str`: the source string for this reader.

- ## Method Details

  - ### close

    public void close()
    Closes this reader. Once it is closed, read operations on this reader will throw an `IOException`. Only the first invocation of this method has any effect.
    Specified by:
      `close` in interface `AutoCloseable`
    Specified by:
      `close` in class `Reader`

  - ### mark

    public void mark(int readLimit) throws IOException

    Sets a mark position in this reader. The parameter `readLimit` is ignored for this class. Calling `reset()` will reposition the reader back to the marked position.

    ###### Parameters

    - `readLimit`: ignored for `StringReader` instances.

    ###### Throws

    - `IllegalArgumentException`: if `readLimit < 0`.

    - `IOException`: if this reader is closed.

    ###### See also

    - #markSupported()

    - #reset()

    Overrides:
      `mark` in class `Reader`
    Throws:
      `IOException`

  - ### markSupported

    public boolean markSupported()

    Indicates whether this reader supports the `mark()` and `reset()` methods. This implementation returns `true`.

    ###### Returns

    always `true`.

    Overrides:
      `markSupported` in class `Reader`

  - ### read

    public int read() throws IOException

    Reads a single character from the source string and returns it as an integer with the two higher-order bytes set to 0. Returns -1 if the end of the source string has been reached.

    ###### Returns

    Overrides:
      `read` in class `Reader`
    Returns:

      the character read or -1 if the end of the source string has been reached.

      ###### Throws

      - `IOException`: if this reader is closed.
    Throws:
      `IOException`

  - ### read

    public int read(char[] buf, int offset, int len) throws IOException

    Reads at most `len` characters from the source string and stores them at `offset` in the character array `buf`. Returns the number of characters actually read or -1 if the end of the source string has been reached.

    ###### Parameters

    - `buf`: the character array to store the characters read.

    - `offset`: @param offset the initial position in `buffer` to store the characters read from this reader.

    - `len`: the maximum number of characters to read.

    ###### Returns

    Specified by:
      `read` in class `Reader`
    Returns:

      the number of characters read or -1 if the end of the reader has been reached.

      ###### Throws

      - `IndexOutOfBoundsException`: @throws IndexOutOfBoundsException if `offset < 0` or `len < 0`, or if `offset + len` is greater than the size of `buf`.

      - `IOException`: if this reader is closed.

    Throws:
      `IOException`

  - ### ready

    public boolean ready() throws IOException

    Indicates whether this reader is ready to be read without blocking. This implementation always returns `true`.

    ###### Returns

    always `true`.

    ###### Throws

    - `IOException`: if this reader is closed.

    ###### See also

    - #read()

    - #read(char[], int, int)

    Overrides:
      `ready` in class `Reader`
    Throws:
      `IOException`

  - ### reset

    public void reset() throws IOException

    Resets this reader's position to the last `mark()` location. Invocations of `read()` and `skip()` will occur from this new location. If this reader has not been marked, it is reset to the beginning of the source string.

    ###### Throws

    - `IOException`: if this reader is closed.

    ###### See also

    - #mark(int)

    - #markSupported()

    Overrides:
      `reset` in class `Reader`
    Throws:
      `IOException`

  - ### skip

    public long skip(long ns) throws IOException

    Moves `ns` characters in the source string. Unlike the `overridden method`, this method may skip negative skip distances: this rewinds the input so that characters may be read again. When the end of the source string has been reached, the input cannot be rewound.

    ###### Parameters

    - `ns`: @param ns the maximum number of characters to skip. Positive values skip forward; negative values skip backward.

    ###### Returns

    Overrides:
      `skip` in class `Reader`
    Returns:

      the number of characters actually skipped. This is bounded below by the number of characters already read and above by the number of characters remaining: `-(num chars already read) <= distance skipped <= num chars remaining`.

      ###### Throws

      - `IOException`: if this reader is closed.

      ###### See also

      - #mark(int)

      - #markSupported()

      - #reset()

    Throws:
      `IOException`