public abstract void write(byte[] data, int offset, int len) throws IOException;
public void write(byte[] data) throws IOException { write(data, 0, data.length); }
  public abstract void write(byte[] data, int offset, int len)    throws IOException;