FileDocCategorySizeDatePackage
CharArrayReader.javaAPI DocJava SE 6 API6191Tue Jun 10 00:25:32 BST 2008java.io

CharArrayReader

public class CharArrayReader extends Reader
This class implements a character buffer that can be used as a character-input stream.
author
Herb Jellinek
version
1.25, 11/17/05
since
JDK1.1

Fields 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.
Constructors Summary
public CharArrayReader(char[] buf)
Creates a CharArrayReader from the specified array of chars.

param
buf Input buffer (not copied)


               	        
       
	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.

throws
IllegalArgumentException If offset is negative or greater than buf.length, or if length is negative, or if the sum of these two values is negative.
param
buf Input buffer (not copied)
param
offset Offset of the first char to read
param
length Number of chars to read

	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 voidclose()
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 voidensureOpen()
Checks to make sure that the stream has not been closed

	if (buf == null)
	    throw new IOException("Stream closed");
    
public voidmark(int readAheadLimit)
Marks the present position in the stream. Subsequent calls to reset() will reposition the stream to this point.

param
readAheadLimit Limit on the number of characters that may be read while still preserving the mark. Because the stream's input comes from a character array, there is no actual limit; hence this argument is ignored.
exception
IOException If an I/O error occurs

	synchronized (lock) {
	    ensureOpen();
	    markedPos = pos;
	}
    
public booleanmarkSupported()
Tells whether this stream supports the mark() operation, which it does.

	return true;
    
public intread()
Reads a single character.

exception
IOException If an I/O error occurs

	synchronized (lock) {
	    ensureOpen();
	    if (pos >= count)
		return -1;
	    else
		return buf[pos++];
	}
    
public intread(char[] b, int off, int len)
Reads characters into a portion of an array.

param
b Destination buffer
param
off Offset at which to start storing characters
param
len Maximum number of characters to read
return
The actual number of characters read, or -1 if the end of the stream has been reached
exception
IOException If an I/O error occurs

	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 booleanready()
Tells whether this stream is ready to be read. Character-array readers are always ready to be read.

exception
IOException If an I/O error occurs

	synchronized (lock) {
	    ensureOpen();
	    return (count - pos) > 0;
	}
    
public voidreset()
Resets the stream to the most recent mark, or to the beginning if it has never been marked.

exception
IOException If an I/O error occurs

	synchronized (lock) {
	    ensureOpen();
	    pos = markedPos;
	}
    
public longskip(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.

param
n The number of characters to skip
return
The number of characters actually skipped
exception
IOException If the stream is closed, or an I/O error occurs

	synchronized (lock) {
	    ensureOpen();
	    if (pos + n > count) {
		n = count - pos;
	    }
	    if (n < 0) {
		return 0;
	    }
	    pos += n;
	    return n;
	}