com.opensymphony.module.sitemesh.util
public class: CharArrayReader [javadoc |
source]
java.lang.Object
java.io.Reader
com.opensymphony.module.sitemesh.util.CharArrayReader
All Implemented Interfaces:
Closeable, Readable
This class implements a character buffer that can be used as a
character-input stream.
Modified from the JDK source in that it gets rid of the
ensureOpen() method, so we get unexpected behaviour if the
reader is closed.
The second modification is that since this class is used
internally by FastPageParser in a single thread, we don't
need any locking or synchronization. Using this class
instead of the standard CharArrayReader improves
FastPageParser performance by 15-20%.
| Field Summary |
|---|
| protected char[] | buf | The character buffer. |
| protected int | pos | The current buffer position. |
| protected int | markedPos | The position of mark in buffer. |
| protected int | count | The index of the end of this buffer. There is not valid
data at or beyond this index. |
| Method from com.opensymphony.module.sitemesh.util.CharArrayReader Detail: |
public void close() {
buf = null;
}
|
public void mark(int readAheadLimit) throws IOException {
markedPos = pos;
}
Mark the present position in the stream. Subsequent calls to reset()
will reposition the stream to this point. |
public boolean markSupported() {
return true;
}
Tell whether this stream supports the mark() operation, which it does. |
public int read() throws IOException {
if(pos >= count)
return -1;
else
return buf[pos++];
}
|
public int read(char[] b,
int off,
int len) throws IOException {
if((off < 0) || (off > b.length) || (len < 0) || ((off + len) > b.length) || ((off + len) < 0))
{
throw new IndexOutOfBoundsException();
}
else if(len == 0)
{
return 0;
}
if(pos >= count)
{
return -1;
}
if(pos + len > count)
{
len = count - pos;
}
if(len < = 0)
{
return 0;
}
System.arraycopy(buf, pos, b, off, len);
pos += len;
return len;
}
Read characters into a portion of an array. |
public boolean ready() throws IOException {
return (count - pos) > 0;
}
Tell whether this stream is ready to be read. Character-array readers
are always ready to be read. |
public void reset() throws IOException {
pos = markedPos;
}
Reset the stream to the most recent mark, or to the beginning if it has
never been marked. |
public long skip(long n) throws IOException {
if(pos + n > count)
{
n = count - pos;
}
if(n < 0)
{
return 0;
}
pos += n;
return n;
}
|