@Override
  public void writeTo(OutputStream outstream) throws IOException {
    if (outstream == null) {
      throw new IllegalArgumentException("Output stream may not be null");
    }

    InputStream instream = new FileInputStream(this.file);
    try {
      byte[] tmp = new byte[4096];
      int l;
      while ((l = instream.read(tmp)) != -1) {
        outstream.write(tmp, 0, l);
        fireOnWrite(l);

        if (_listener != null && !_listener.isRunning()) {
          break;
        }
      }
      outstream.flush();
    } finally {
      instream.close();
    }
  }
 protected void fireOnWrite(int written) {
   if (_listener != null) {
     _listener.onWrite(this, written);
   }
 }