code: public static long parseDataSize(String dataSizeText) {
          requireNonNull(dataSizeText, "text");
          final Matcher matcher = DATA_SIZE_PATTERN.matcher(dataSizeText);
          checkArgument(matcher.matches(),
                        "Invalid data size text: %s (expected: %s)",
                        dataSizeText, DATA_SIZE_PATTERN);
  
          final long unit;
          final String unitText = matcher.group(2);
          if (Strings.isNullOrEmpty(unitText)) {
              unit = 1L;
          } else {
              switch (Ascii.toLowerCase(unitText)) {
                  case "b":
                      unit = 1L;
                      break;
                  case "kb":
                      unit = 1024L;
                      break;
                  case "mb":
                      unit = 1024L * 1024L;
                      break;
                  case "gb":
                      unit = 1024L * 1024L * 1024L;
                      break;
                  case "tb":
                      unit = 1024L * 1024L * 1024L * 1024L;
                      break;
                  default:
                      throw new IllegalArgumentException("Invalid data size text: " + dataSizeText +
                                                         " (expected: " + DATA_SIZE_PATTERN + ')');
              }
          }
          try {
              final long amount = Long.parseLong(matcher.group(1));
              return LongMath.checkedMultiply(amount, unit);
          } catch (Exception e) {
              throw new IllegalArgumentException("Invalid data size text: " + dataSizeText +
                                                 " (expected: " + DATA_SIZE_PATTERN + ')', e);
          }
      }
docs: Parses the data size text as a decimal {@code long}.
  
  @param dataSizeText the data size text, i.e. {@code 1}, {@code 1B}, {@code 1KB}, {@code 1MB},
  {@code 1GB} or {@code 1TB}