FileDocCategorySizeDatePackage
ReaderInputStream.javaAPI DocApache Ant 1.705778Wed Dec 13 06:16:20 GMT 2006org.apache.tools.ant.util

ReaderInputStream

public class ReaderInputStream extends InputStream
Adapts a Reader as an InputStream. Adapted from StringInputStream.

Fields Summary
private Reader
in
Source Reader
private String
encoding
private byte[]
slack
private int
begin
Constructors Summary
public ReaderInputStream(Reader reader)
Construct a ReaderInputStream for the specified Reader.

param
reader Reader. Must not be null.


                          
       
        in = reader;
    
public ReaderInputStream(Reader reader, String encoding)
Construct a ReaderInputStream for the specified Reader, with the specified encoding.

param
reader non-null Reader.
param
encoding non-null String encoding.

        this(reader);
        if (encoding == null) {
            throw new IllegalArgumentException("encoding must not be null");
        } else {
            this.encoding = encoding;
        }
    
Methods Summary
public synchronized intavailable()

return
the current number of bytes ready for reading
exception
IOException if an error occurs

        if (in == null) {
            throw new IOException("Stream Closed");
        }
        if (slack != null) {
            return slack.length - begin;
        }
        if (in.ready()) {
            return 1;
        } else {
            return 0;
        }
    
public synchronized voidclose()
Closes the Stringreader.

exception
IOException if the original StringReader fails to be closed

        if (in != null) {
            in.close();
            slack = null;
            in = null;
        }
    
public synchronized voidmark(int limit)
Marks the read limit of the StringReader.

param
limit the maximum limit of bytes that can be read before the mark position becomes invalid

        try {
            in.mark(limit);
        } catch (IOException ioe) {
            throw new RuntimeException(ioe.getMessage());
        }
    
public booleanmarkSupported()

return
false - mark is not supported

        return false;   // would be imprecise
    
public synchronized intread()
Reads from the Reader, returning the same value.

return
the value of the next character in the Reader.
exception
IOException if the original Reader fails to be read

        if (in == null) {
            throw new IOException("Stream Closed");
        }

        byte result;
        if (slack != null && begin < slack.length) {
            result = slack[begin];
            if (++begin == slack.length) {
                slack = null;
            }
        } else {
            byte[] buf = new byte[1];
            if (read(buf, 0, 1) <= 0) {
                return -1;
            } else {
                result = buf[0];
            }
        }

        return result & 0xFF;
    
public synchronized intread(byte[] b, int off, int len)
Reads from the Reader into a byte array

param
b the byte array to read into
param
off the offset in the byte array
param
len the length in the byte array to fill
return
the actual number read into the byte array, -1 at the end of the stream
exception
IOException if an error occurs

        if (in == null) {
            throw new IOException("Stream Closed");
        }
        if (len == 0) {
            return 0;
        }
        while (slack == null) {
            char[] buf = new char[len]; // might read too much
            int n = in.read(buf);
            if (n == -1) {
                return -1;
            }
            if (n > 0) {
                slack = new String(buf, 0, n).getBytes(encoding);
                begin = 0;
            }
        }

        if (len > slack.length - begin) {
            len = slack.length - begin;
        }

        System.arraycopy(slack, begin, b, off, len);

        if ((begin += len) >= slack.length) {
            slack = null;
        }

        return len;
    
public synchronized voidreset()
Resets the StringReader.

exception
IOException if the StringReader fails to be reset

        if (in == null) {
            throw new IOException("Stream Closed");
        }
        slack = null;
        in.reset();