public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
   if ("equals".equals(method.getName())) {
     throw new UnsupportedOperationException();
   } else if ("hashCode".equals(method.getName())) {
     return Integer.valueOf(reader.hashCode());
   } else if ("toString".equals(method.getName())) {
     return "ReaderHandler [" + reader + "]";
   } else {
     try {
       return method.invoke(proxy, args);
     } catch (Exception e) {
       throw new FormatException(e);
     }
   }
 }