docs: public static long parseBytes(String text) throws IllegalArgumentException {
  		checkNotNull(text, "text");
  
  		final String trimmed = text.trim();
  		checkArgument(!trimmed.isEmpty(), "argument is an empty- or whitespace-only string");
  
  		final int len = trimmed.length();
  		int pos = 0;
  
  		char current;
  		while (pos < len && (current = trimmed.charAt(pos)) >= '0' && current <= '9') {
  			pos++;
  		}
  
  		final String number = trimmed.substring(0, pos);
  		final String unit = trimmed.substring(pos).trim().toLowerCase(Locale.US);
  
  		if (number.isEmpty()) {
  			throw new NumberFormatException("text does not start with a number");
  		}
  
  		final long value;
  		try {
  			value = Long.parseLong(number); // this throws a NumberFormatException on overflow
  		}
  		catch (NumberFormatException e) {
  			throw new IllegalArgumentException("The value '" + number +
  					"' cannot be re represented as 64bit number (numeric overflow).");
  		}
  
  		final long multiplier;
  		if (unit.isEmpty()) {
  			multiplier = 1L;
  		}
  		else {
  			if (matchesAny(unit, BYTES)) {
  				multiplier = 1L;
  			}
  			else if (matchesAny(unit, KILO_BYTES)) {
  				multiplier = 1024L;
  			}
  			else if (matchesAny(unit, MEGA_BYTES)) {
  				multiplier = 1024L * 1024L;
  			}
  			else if (matchesAny(unit, GIGA_BYTES)) {
  				multiplier = 1024L * 1024L * 1024L;
  			}
  			else if (matchesAny(unit, TERA_BYTES)) {
  				multiplier = 1024L * 1024L * 1024L * 1024L;
  			}
  			else {
  				throw new IllegalArgumentException("Memory size unit '" + unit +
  						"' does not match any of the recognized units: " + MemoryUnit.getAllUnits());
  			}
  		}
  
  		final long result = value * multiplier;
  
  		// check for overflow
  		if (result / multiplier != value) {
  			throw new IllegalArgumentException("The value '" + text +
  					"' cannot be re represented as 64bit number of bytes (numeric overflow).");
  		}
  
  		return result;
  	}