code: public static long[] parseContentRange(String value) {
  		if (!value.startsWith("bytes ")) return null;
  		int s = "bytes ".length();
  		while (s < value.length() && value.charAt(s) == ' ')
  			s++;
  		int pslash = value.indexOf('/', s);
  		if (pslash < 0) return null;
  
  		final String rangeSpec = value.substring(s, pslash).trim();
  		long start, stop;
  		if (rangeSpec.equals("*"))
  			start = stop = -1;
  		else {
  			long[] range = parseRange(rangeSpec);
  			if (range == null) return null;
  			if (range[0] < 0 || range[1] < 0) return null;
  			start = range[0];
  			stop = range[1];
  		}
  		final String instanceLength = value.substring(pslash + 1).trim();
  		long length;
  		if (instanceLength.equals("*"))
  			length = -1;
  		else {
  			try {
  				length = Long.parseLong(instanceLength);
  			} catch (NumberFormatException ex) {
  				return null;
  			}
  		}
  		return new long[] { start, stop, length };
  	}
docs: Parse {@code value} as <em>byte-content-range-spec</em>.
  <em>byte-range-resp-spec</em> is parsed with {@link #parseRange(String)}.
  If <em>byte-range-resp-spec</em> is {@code *}, both <em>first-byte-pos</em> and
  <em>last-byte-pos</em> will be {@code -1}.
  @param value {@code Content-Range} header field value.
  @return Three element array with <em>first-byte-pos</em>, <em>last-byte-pos + 1</em>
  and <em>instance-length</em>, or {@code null} if {@code value} is syntactically invalid.
  @see #parseRange