Class PlaybackInputStream

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

    public final class PlaybackInputStream
    extends java.io.InputStream
    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.

    • Field Summary

      Fields 
      Modifier and Type Field Description
      private byte[] byteBuffer_
      Byte buffer.
      private int byteLength_
      Length of bytes read into byte buffer.
      private int byteOffset_
      Offset into byte buffer during playback.
      private boolean cleared_
      Buffer cleared.
      private static boolean DEBUG_PLAYBACK
      Set to true to debug playback.
      private boolean detected_
      Encoding detected.
      private java.io.InputStream in_
      Our inputstream
      private boolean playback_
      Playback mode.
      private int pushbackLength_
      Pushback length.
      private int pushbackOffset_
      Pushback offset.
    • Constructor Summary

      Constructors 
      Constructor Description
      PlaybackInputStream​(java.io.InputStream inputStream)  
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      void clear()
      Clears the buffer.
      void detectEncoding​(java.lang.String[] encodings)  
      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.InputStream

        available, close, mark, markSupported, nullInputStream, readAllBytes, readNBytes, readNBytes, reset, skip, transferTo
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • DEBUG_PLAYBACK

        private static final boolean DEBUG_PLAYBACK
        Set to true to debug playback.
        See Also:
        Constant Field Values
      • playback_

        private boolean playback_
        Playback mode.
      • cleared_

        private boolean cleared_
        Buffer cleared.
      • detected_

        private boolean detected_
        Encoding detected.
      • byteBuffer_

        private byte[] byteBuffer_
        Byte buffer.
      • byteOffset_

        private int byteOffset_
        Offset into byte buffer during playback.
      • byteLength_

        private int byteLength_
        Length of bytes read into byte buffer.
      • pushbackOffset_

        private int pushbackOffset_
        Pushback offset.
      • pushbackLength_

        private int pushbackLength_
        Pushback length.
      • in_

        private final java.io.InputStream in_
        Our inputstream
    • Constructor Detail

      • PlaybackInputStream

        public PlaybackInputStream​(java.io.InputStream inputStream)
    • Method Detail

      • detectEncoding

        public void detectEncoding​(java.lang.String[] encodings)
                            throws java.io.IOException
        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.
        Specified by:
        read in class java.io.InputStream
        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.InputStream
        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.InputStream
        Throws:
        java.io.IOException