private static final String toHumanReadable(final long bytes) {
		double d = bytes;
		int f = 0;
		while ((d >= 1024) && (f < 60)) {
			d /= 1024;
			f += 10;
		}
		final DecimalFormat df = new DecimalFormat("#.##");
		final DecimalFormatSymbols dfs = DecimalFormatSymbols.getInstance(Locale.US);
		df.setDecimalFormatSymbols(dfs);
		df.setRoundingMode(RoundingMode.CEILING);
		final String b = df.format(d);
		// http://es.wikipedia.org/wiki/Byte#M.C3.BAltiplos_utilizando_los_prefijos_ISO.2FIEC_80000-13
		switch (f) {
			case 0:
				return b + "B";
			case 10:
				return b + "KiB";
			case 20:
				return b + "MiB";
			case 30:
				return b + "GiB";
			case 40:
				return b + "TiB";
			case 50:
				return b + "PiB";
			case 60:
				return b + "EiB";
		}
		return bytes + "???";
	}