org.cyberneko.html
Class HTMLScanner.PlaybackInputStream

java.lang.Object
  extended by java.io.InputStream
      extended by java.io.FilterInputStream
          extended by org.cyberneko.html.HTMLScanner.PlaybackInputStream
All Implemented Interfaces:
java.io.Closeable
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
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
HTMLScanner.PlaybackInputStream(java.io.InputStream in)
          Constructor.
 
Method Summary
 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-2008, Andy Clark. All rights reserved.