001 /*
002 * $Id: CatReader.java 3442 2010-12-25 16:28:07Z kredel $
003 */
004
005 package edu.jas.util;
006
007
008 import java.io.Reader;
009 import java.io.IOException;
010
011 //import org.apache.log4j.Logger;
012
013
014
015 /**
016 * Reader to concat two readers.
017 * Read from first reader until it is empty, then read from second reader.
018 * @author Heinz Kredel
019 */
020
021 public 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 public int read(char[] cbuf, int off, int len) throws IOException {
057 int i = -1;
058 if ( doFirst ) {
059 i = first.read(cbuf,off,len);
060 if ( i < 0 ) {
061 doFirst = false;
062 i = second.read(cbuf,off,len);
063 }
064 } else {
065 i = second.read(cbuf,off,len);
066 }
067 //System.out.println("i = " + i);
068 return i;
069 }
070
071
072 /**
073 * Close this Reader.
074 */
075 public void close() throws IOException {
076 try {
077 first.close();
078 } finally {
079 second.close();
080 }
081 }
082
083 }