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)Creates a 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)Creates a 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()Closes the stream and releases any system resources associated with
it. Once the stream has been closed, further read(), ready(),
mark(), reset(), or skip() invocations will throw an IOException.
Closing a previously closed stream has no effect.
buf = null;
| private void | ensureOpen()Checks to make sure that the stream has not been closed
if (buf == null)
throw new IOException("Stream closed");
| public void | mark(int readAheadLimit)Marks 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()Tells whether this stream supports the mark() operation, which it does.
return true;
| public int | read()Reads a single character.
synchronized (lock) {
ensureOpen();
if (pos >= count)
return -1;
else
return buf[pos++];
}
| public int | read(char[] b, int off, int len)Reads 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()Tells 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()Resets 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)Skips 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;
}
|
|