org.cyberneko.html

Class HTMLScanner.PlaybackInputStream

Enclosing Class:
HTMLScanner

public static class HTMLScanner.PlaybackInputStream
extends 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.

Constructor Summary

PlaybackInputStream(InputStream in)
Constructor.

Method Summary

void
clear()
Clears the buffer.
void
detectEncoding(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.

Field Details

fByteBuffer

protected byte[] fByteBuffer
Byte buffer.

fByteLength

protected int fByteLength
Length of bytes read into byte buffer.

fByteOffset

protected int fByteOffset
Offset into byte buffer during playback.

fCleared

protected boolean fCleared
Buffer cleared.

fDetected

protected boolean fDetected
Encoding detected.

fPlayback

protected boolean fPlayback
Playback mode.

fPushbackLength

public int fPushbackLength
Pushback length.

fPushbackOffset

public int fPushbackOffset
Pushback offset.

Constructor Details

PlaybackInputStream

public PlaybackInputStream(InputStream in)
Constructor.

Method Details

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.


detectEncoding

public void detectEncoding(String[] encodings)
            throws IOException
Detect encoding.

playback

public void playback()
Playback buffer contents.

read

public int read()
            throws IOException
Read a byte.

read

public int read(byte[] array)
            throws IOException
Read an array of bytes.

read

public int read(byte[] array,
                int offset,
                int length)
            throws IOException
Read an array of bytes.

(C) Copyright 2002-2005, Andy Clark. All rights reserved.