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