001/*
002 * $Id: CatReader.java 4065 2012-07-27 15:17:38Z kredel $
003 */
004
005package edu.jas.util;
006
007
008import java.io.IOException;
009import java.io.Reader;
010
011
012// import org.apache.log4j.Logger;
013
014
015/**
016 * Reader to conncat two readers. Read from first reader until it is empty, then
017 * read from second reader.
018 * @author Heinz Kredel
019 */
020
021public class CatReader extends Reader {
022
023
024    // private static final Logger logger = Logger.getLogger(CatReader.class);
025    // private static boolean debug = logger.isDebugEnabled();
026
027
028    private final Reader first;
029
030
031    private final Reader second;
032
033
034    private boolean doFirst;
035
036
037    /**
038     * Constructor.
039     * @param f first Reader.
040     * @param s second Reader.
041     */
042    public CatReader(Reader f, Reader s) {
043        first = f;
044        second = s;
045        doFirst = true;
046    }
047
048
049    /**
050     * Read char array.
051     * @param cbuf array.
052     * @param off start offset.
053     * @param len number of chars to read.
054     * @return number of chars read, or -1.
055     */
056    @Override
057    public int read(char[] cbuf, int off, int len) throws IOException {
058        int i = -1;
059        if (doFirst) {
060            i = first.read(cbuf, off, len);
061            if (i < 0) {
062                doFirst = false;
063                i = second.read(cbuf, off, len);
064            }
065        } else {
066            i = second.read(cbuf, off, len);
067        }
068        //System.out.println("i = " + i);
069        return i;
070    }
071
072
073    /**
074     * Close this Reader.
075     */
076    @Override
077    public void close() throws IOException {
078        try {
079            first.close();
080        } finally {
081            second.close();
082        }
083    }
084
085}