@Override
    public int read(byte[] arg0, int arg1, int arg2) throws IOException {
        try {
            return delegate.read(arg0, arg1, arg2);
        } catch (IOException | RuntimeException e) {
            if ("Corrupt GZIP trailer".equals(e.getMessage())) {
                return -1;
            } else {
                observer.exceptionOccurred(e);
                throw new RuntimeException("The observer failed to throw per API contract.");
            }
        }
    }
@see java.io.InputStream#read(byte[], int, int)
src/nu/validator/io/ObservableInputStream.java