formatting - How to convert byte size into human readable format in java?
dal sito Stack Overflow
La soluzione proposta più votata mi ha colpito per l'eleganza, la riporto in tutto il suo splendore:
public static String humanReadableByteCount(long bytes, boolean si) { int unit = si ? 1000 : 1024; if (bytes < unit) return bytes + " B"; int exp = (int) (Math.log(bytes) / Math.log(unit)); String pre = (si ? "kMGTPE" : "KMGTPE").charAt(exp-1) + (si ? "" : "i"); return String.format("%.1f %sB", bytes / Math.pow(unit, exp), pre); }L'ho subito utilizzata con successo e soddisfazione. L'eleganza che mi ha colpito è l'utilizzo dei logaritmi per calcolare "secco" l'indice della lettera da utilizzare. Inoltre è comodo il secondo parametro da passare al metodo per selezionare il sistema di unità da utilizzare per passare dai prefissi multipli del Sistema internazionale a quelli binari, passando false al parametro si si ottengono i valori in multipli di 1024 altrimenti in multipli di 1000. Qualche esempio di risultati:
0: 0 B 0 B 27: 27 B 27 B 110592: 110.6 KB 108.0 KiB 452984832: 453.0 MB 432.0 MiB 1855425871872: 1.9 TB 1.7 TiB
Nessun commento:
Posta un commento