package com.limegroup.gnutella.util; import java.io.BufferedInputStream; import java.io.FilterInputStream; import java.io.IOException; /** * InputStream that catches NPEs from BufferedInputStream * and rethrows them as IOExceptions. * * Prior to Java 1.5 (which finally was able to properly implement a completely * asynchronous BufferedInputStream), various internal methods could throw an NPE * if the connection was asynchronously closed). */ public class NPECatchingInputStream extends FilterInputStream { public NPECatchingInputStream (final BufferedInputStream in) { super(in); } public int read() throws IOException { try { return in.read(); } catch(NullPointerException npe) { throw (IOException)new IOException().initCause(npe); } } public int read(byte[] b, int off, int len) throws IOException { try { return in.read(b, off, len); } catch(NullPointerException npe) { throw (IOException)new IOException().initCause(npe); } } public long skip(long n) throws IOException { try { return in.skip(n); } catch(NullPointerException npe) { throw (IOException)new IOException().initCause(npe); } } public void close() throws IOException { try { in.close(); } catch(NullPointerException npe) { throw (IOException)new IOException().initCause(npe); } } }