code: public byte[] getBlock(String url, long offset, int length) 
  	throws IOException {
  
  		HttpMethod method = null;
  		try {
  			method = new GetMethod(url);
  		} catch(IllegalArgumentException e) {
  			LOGGER.warning("Bad URL for block fetch:" + url);
  			throw new IOException("Url:" + url + " does not look like an URL?");
  		}
  		StringBuilder sb = new StringBuilder(16);
  		sb.append(ZiplinedBlock.BYTES_HEADER).append(offset);
  		sb.append(ZiplinedBlock.BYTES_MINUS).append((offset + length)-1);
  		String rangeHeader = sb.toString();
  		method.addRequestHeader(ZiplinedBlock.RANGE_HEADER, rangeHeader);
  		//uc.setRequestProperty(RANGE_HEADER, sb.toString());
  		long start = System.currentTimeMillis();
  	    try {
  			LOGGER.fine("Reading block:" + url + "("+rangeHeader+")");
  	    	int status = http.executeMethod(method);
  	    	if((status == 200) || (status == 206)) {
  	    		InputStream is = method.getResponseBodyAsStream();
  	    		byte[] block = new byte[length];
  	    		ByteStreams.readFully(is, block);
  	    		long elapsed = System.currentTimeMillis() - start;
  				PerformanceLogger.noteElapsed("CDXBlockLoad",elapsed,url);
  	    		return block;
  	    		
  	    	} else {
  	    		throw new IOException("Bad status for " + url);
  	    	}
  		} finally {
  	    	method.releaseConnection();
  	    }
  	}
docs: Fetch a range of bytes from a particular URL. Note that the bytes are
  read into memory all at once, so care should be taken with the length
  argument.
  
  @param url String URL to fetch
  @param offset byte start offset of the desired range
  @param length number of octets to fetch
  @return a new byte[] containing the octets fetched
  @throws IOException on HTTP and Socket failures, as well as Timeouts