14ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira/*
24ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * Licensed to the Apache Software Foundation (ASF) under one or more
34ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * contributor license agreements.  See the NOTICE file distributed with
44ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * this work for additional information regarding copyright ownership.
54ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * The ASF licenses this file to You under the Apache License, Version 2.0
64ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * (the "License"); you may not use this file except in compliance with
74ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * the License.  You may obtain a copy of the License at
84ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira *
94ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira *      http://www.apache.org/licenses/LICENSE-2.0
104ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira *
114ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * Unless required by applicable law or agreed to in writing, software
124ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * distributed under the License is distributed on an "AS IS" BASIS,
134ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
144ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * See the License for the specific language governing permissions and
154ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * limitations under the License.
164ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira */
174ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereirapackage org.apache.commons.io.input;
184ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira
194ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereiraimport java.io.FilterReader;
204ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereiraimport java.io.IOException;
214ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereiraimport java.io.Reader;
224ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira
234ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira/**
244ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * A Proxy stream which acts as expected, that is it passes the method
254ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * calls on to the proxied stream and doesn't change which methods are
264ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * being called.
274ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * <p>
284ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * It is an alternative base class to FilterReader
294ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * to increase reusability, because FilterReader changes the
304ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * methods being called, such as read(char[]) to read(char[], int, int).
314ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira *
324ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * @author Stephen Colebourne
334ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * @version $Id: ProxyReader.java 610010 2008-01-08 14:50:59Z niallp $
344ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira */
354ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereirapublic abstract class ProxyReader extends FilterReader {
364ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira
374ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira    /**
384ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     * Constructs a new ProxyReader.
394ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     *
404ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     * @param proxy  the Reader to delegate to
414ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     */
424ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira    public ProxyReader(Reader proxy) {
434ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        super(proxy);
444ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        // the proxy is stored in a protected superclass variable named 'in'
454ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira    }
464ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira
474ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira    /**
484ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     * Invokes the delegate's <code>read()</code> method.
494ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     * @return the character read or -1 if the end of stream
504ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     * @throws IOException if an I/O error occurs
514ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     */
524ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira    public int read() throws IOException {
534ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        return in.read();
544ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira    }
554ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira
564ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira    /**
574ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     * Invokes the delegate's <code>read(char[])</code> method.
584ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     * @param chr the buffer to read the characters into
594ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     * @return the number of characters read or -1 if the end of stream
604ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     * @throws IOException if an I/O error occurs
614ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     */
624ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira    public int read(char[] chr) throws IOException {
634ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        return in.read(chr);
644ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira    }
654ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira
664ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira    /**
674ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     * Invokes the delegate's <code>read(char[], int, int)</code> method.
684ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     * @param chr the buffer to read the characters into
694ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     * @param st The start offset
704ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     * @param end The number of bytes to read
714ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     * @return the number of characters read or -1 if the end of stream
724ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     * @throws IOException if an I/O error occurs
734ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     */
744ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira    public int read(char[] chr, int st, int end) throws IOException {
754ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        return in.read(chr, st, end);
764ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira    }
774ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira
784ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira    /**
794ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     * Invokes the delegate's <code>skip(long)</code> method.
804ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     * @param ln the number of bytes to skip
814ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     * @return the number of bytes to skipped or -1 if the end of stream
824ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     * @throws IOException if an I/O error occurs
834ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     */
844ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira    public long skip(long ln) throws IOException {
854ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        return in.skip(ln);
864ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira    }
874ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira
884ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira    /**
894ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     * Invokes the delegate's <code>ready()</code> method.
904ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     * @return true if the stream is ready to be read
914ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     * @throws IOException if an I/O error occurs
924ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     */
934ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira    public boolean ready() throws IOException {
944ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        return in.ready();
954ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira    }
964ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira
974ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira    /**
984ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     * Invokes the delegate's <code>close()</code> method.
994ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     * @throws IOException if an I/O error occurs
1004ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     */
1014ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira    public void close() throws IOException {
1024ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        in.close();
1034ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira    }
1044ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira
1054ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira    /**
1064ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     * Invokes the delegate's <code>mark(int)</code> method.
1074ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     * @param idx read ahead limit
1084ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     * @throws IOException if an I/O error occurs
1094ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     */
1104ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira    public synchronized void mark(int idx) throws IOException {
1114ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        in.mark(idx);
1124ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira    }
1134ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira
1144ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira    /**
1154ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     * Invokes the delegate's <code>reset()</code> method.
1164ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     * @throws IOException if an I/O error occurs
1174ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     */
1184ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira    public synchronized void reset() throws IOException {
1194ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        in.reset();
1204ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira    }
1214ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira
1224ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira    /**
1234ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     * Invokes the delegate's <code>markSupported()</code> method.
1244ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     * @return true if mark is supported, otherwise false
1254ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     */
1264ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira    public boolean markSupported() {
1274ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        return in.markSupported();
1284ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira    }
1294ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira
1304ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira}
131