HTMLScanner.PlaybackInputStream (NekoHTML 1.9.21-SNAPSHOT Implementation)
Date: 2014-03-11

org.cyberneko.html

## Class HTMLScanner.PlaybackInputStream

- java.lang.Object
- - java.io.InputStream
  - - java.io.FilterInputStream
    - - org.cyberneko.html.HTMLScanner.PlaybackInputStream

- All Implemented Interfaces:
    java.io.Closeable, java.lang.AutoCloseable
  Enclosing class:
    HTMLScanner

      public static class HTMLScanner.PlaybackInputStream
      extends java.io.FilterInputStream

  A playback input stream. This class has the ability to save the bytes read from the underlying input stream and play the bytes back later. This class is used by the HTML scanner to switch encodings when a <meta> tag is detected that specifies a different encoding.

  If the encoding is changed, then the scanner calls the `playback` method and re-scans the beginning of the HTML document again. This should not be too much of a performance problem because the <meta> tag appears at the beginning of the document.

  If the <body> tag is reached without playing back the bytes, then the buffer can be cleared by calling the `clear` method. This stops the buffering of bytes and allows the memory used by the buffer to be reclaimed.

  Note: If the buffer is never played back or cleared, this input stream will continue to buffer the entire stream. Therefore, it is very important to use this stream correctly.

  Author:
    Andy Clark

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `protected byte[]` | `fByteBuffer` Byte buffer.
    `protected int` | `fByteLength` Length of bytes read into byte buffer.
    `protected int` | `fByteOffset` Offset into byte buffer during playback.
    `protected boolean` | `fCleared` Buffer cleared.
    `protected boolean` | `fDetected` Encoding detected.
    `protected boolean` | `fPlayback` Playback mode.
    `int` | `fPushbackLength` Pushback length.
    `int` | `fPushbackOffset` Pushback offset.

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

      `in`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `HTMLScanner.PlaybackInputStream(java.io.InputStream in)` Constructor.

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `clear()` Clears the buffer.
    `void` | `detectEncoding(java.lang.String[] encodings)` Detect encoding.
    `void` | `playback()` Playback buffer contents.
    `int` | `read()` Read a byte.
    `int` | `read(byte[] array)` Read an array of bytes.
    `int` | `read(byte[] array, int offset, int length)` Read an array of bytes.

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

      `available, close, mark, markSupported, reset, skip`

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

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

- - ### Field Detail

    - #### fPlayback

          protected boolean fPlayback

      Playback mode.

    - #### fCleared

          protected boolean fCleared

      Buffer cleared.

    - #### fDetected

          protected boolean fDetected

      Encoding detected.

    - #### fByteBuffer

          protected byte[] fByteBuffer

      Byte buffer.

    - #### fByteOffset

          protected int fByteOffset

      Offset into byte buffer during playback.

    - #### fByteLength

          protected int fByteLength

      Length of bytes read into byte buffer.

    - #### fPushbackOffset

          public int fPushbackOffset

      Pushback offset.

    - #### fPushbackLength

          public int fPushbackLength

      Pushback length.

  - ### Constructor Detail

    - #### HTMLScanner.PlaybackInputStream

          public HTMLScanner.PlaybackInputStream(java.io.InputStream in)

      Constructor.

  - ### Method Detail

    - #### detectEncoding

          public void detectEncoding(java.lang.String[] encodings)
                              throws java.io.IOException

      Detect encoding.
      Throws:
        `java.io.IOException`

    - #### playback

          public void playback()

      Playback buffer contents.

    - #### clear

          public void clear()

      Clears the buffer.

      Note: The buffer cannot be cleared during playback. Therefore, calling this method during playback will not do anything. However, the buffer will be cleared automatically at the end of playback.

    - #### read

          public int read()
                   throws java.io.IOException

      Read a byte.
      Overrides:
        `read` in class `java.io.FilterInputStream`
      Throws:
        `java.io.IOException`

    - #### read

          public int read(byte[] array)
                   throws java.io.IOException

      Read an array of bytes.
      Overrides:
        `read` in class `java.io.FilterInputStream`
      Throws:
        `java.io.IOException`

    - #### read

          public int read(byte[] array,
                 int offset,
                 int length)
                   throws java.io.IOException

      Read an array of bytes.
      Overrides:
        `read` in class `java.io.FilterInputStream`
      Throws:
        `java.io.IOException`

(C) Copyright 2002-2014, Andy Clark, Marc Guillemot. All rights reserved.