docs: protected IOException copyRange(final InputStream istream, final ServletOutputStream ostream, final long start, final long end) {
  		if (log.isDebugEnabled())
  			log.debug("Serving bytes:" + start + "-" + end);
  
  		long skipped = 0;
  		try {
  			skipped = istream.skip(start);
  		} catch (final IOException e) {
  			return e;
  		}
  		if (skipped < start) {
  			return new IOException("Skip failed : "+Long.valueOf(skipped)+" / "+ Long.valueOf(start));
  		}
  
  		IOException exception = null;
  		long bytesToRead = end - start + 1;
  
  		final byte buffer[] = new byte[getInputBufferSize()];
  		int len = buffer.length;
  		while ((bytesToRead > 0) && (len >= buffer.length)) {
  			try {
  				len = istream.read(buffer);
  				if (bytesToRead >= len) {
  					ostream.write(buffer, 0, len);
  					bytesToRead -= len;
  				} else {
  					ostream.write(buffer, 0, (int) bytesToRead);
  					bytesToRead = 0;
  				}
  			} catch (final IOException e) {
  				exception = e;
  				len = -1;
  			}
  			if (len < buffer.length)
  				break;
  		}
  
  		return exception;
  	}