001 package org.shiftone.jrat.util.io.proxy; 002 003 004 import org.shiftone.jrat.core.JRatException; 005 import org.shiftone.jrat.util.log.Logger; 006 007 import java.io.IOException; 008 import java.io.InputStream; 009 010 011 /** 012 * @author jeff@shiftone.org (Jeff Drost) 013 */ 014 public abstract class ProxyInputStream extends InputStream { 015 016 private static final Logger LOG = Logger.getLogger(ProxyInputStream.class); 017 018 protected abstract InputStream getTarget() throws IOException; 019 020 021 private InputStream getTargetRTE() { 022 023 try { 024 return getTarget(); 025 } 026 catch (IOException e) { 027 throw new JRatException("failed to get target InputStream", e); 028 } 029 } 030 031 032 public int read() throws IOException { 033 return getTarget().read(); 034 } 035 036 037 public int read(byte[] b) throws IOException { 038 return getTarget().read(b); 039 } 040 041 042 public int read(byte[] b, int off, int len) throws IOException { 043 return getTarget().read(b, off, len); 044 } 045 046 047 public long skip(long n) throws IOException { 048 return getTarget().skip(n); 049 } 050 051 052 public int available() throws IOException { 053 return getTarget().available(); 054 } 055 056 057 public void close() throws IOException { 058 getTarget().close(); 059 } 060 061 062 public void mark(int readlimit) { 063 getTargetRTE().mark(readlimit); 064 } 065 066 067 public void reset() throws IOException { 068 getTarget().reset(); 069 } 070 071 072 public boolean markSupported() { 073 return getTargetRTE().markSupported(); 074 } 075 }