CharArrayReaderpublic class CharArrayReader extends Reader This class implements a character buffer that can be used as a
character-input stream. |
Fields Summary |
---|
protected char[] | bufThe character buffer. | protected int | posThe current buffer position. | protected int | markedPosThe position of mark in buffer. | protected int | countThe index of the end of this buffer. There is not valid
data at or beyond this index. |
Constructors Summary |
---|
public CharArrayReader(char[] buf)Create an CharArrayReader from the specified array of chars.
this.buf = buf;
this.pos = 0;
this.count = buf.length;
| public CharArrayReader(char[] buf, int offset, int length)Create an CharArrayReader from the specified array of chars.
The resulting reader will start reading at the given
offset. The total number of char values that can be
read from this reader will be either length or
buf.length-offset, whichever is smaller.
if ((offset < 0) || (offset > buf.length) || (length < 0) ||
((offset + length) < 0)) {
throw new IllegalArgumentException();
}
this.buf = buf;
this.pos = offset;
this.count = Math.min(offset + length, buf.length);
this.markedPos = offset;
|
Methods Summary |
---|
public void | close()Close the stream.
buf = null;
| private void | ensureOpen()Check to make sure that the stream has not been closed
if (buf == null)
throw new IOException("Stream closed");
| public void | mark(int readAheadLimit)Mark the present position in the stream. Subsequent calls to reset()
will reposition the stream to this point.
synchronized (lock) {
ensureOpen();
markedPos = pos;
}
| public boolean | markSupported()Tell whether this stream supports the mark() operation, which it does.
return true;
| public int | read()Read a single character.
synchronized (lock) {
ensureOpen();
if (pos >= count)
return -1;
else
return buf[pos++];
}
| public int | read(char[] b, int off, int len)Read characters into a portion of an array.
synchronized (lock) {
ensureOpen();
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;
}
| public boolean | ready()Tell whether this stream is ready to be read. Character-array readers
are always ready to be read.
synchronized (lock) {
ensureOpen();
return (count - pos) > 0;
}
| public void | reset()Reset the stream to the most recent mark, or to the beginning if it has
never been marked.
synchronized (lock) {
ensureOpen();
pos = markedPos;
}
| public long | skip(long n)Skip characters. Returns the number of characters that were skipped.
The n parameter may be negative, even though the
skip method of the {@link Reader} superclass throws
an exception in this case. If n is negative, then
this method does nothing and returns 0 .
synchronized (lock) {
ensureOpen();
if (pos + n > count) {
n = count - pos;
}
if (n < 0) {
return 0;
}
pos += n;
return n;
}
|
|