public abstract int read(ByteBuffer dst) throws IOException;
public final long read(ByteBuffer[] dsts) throws IOException { long b = 0;  for (int i = 0; i < dsts.length; i++) b += read(dsts[i]);  return b; }
  public abstract int read(ByteBuffer dst) throws IOException;