简体   繁体   English

将字节大小转换为 Java 中的人类可读格式?

[英]convert byte size into human readable format in Java?

Am trying to Create a static method String formatSize(long sizeInBytes) This method needs to return the most appropriate representation for the provided file size (in bytes) to a human-readable format with at least 2 decimal places (except for bytes).我正在尝试创建 static 方法String formatSize(long sizeInBytes)此方法需要将提供的文件大小(以字节为单位)的最合适的表示形式返回为至少有 2 个小数位(字节除外)的人类可读格式。

here is my code这是我的代码

public class HexEditor {

    public static void main(String[] args) {
        System.out.println(formatSize(2147483647));
        System.out.println(formatSize(123));
        System.out.println(formatSize(83647));
        System.out.println(formatSize(9585631));
        System.out.println(formatSize(188900977659375L));
    }
    public static String floatForm (double d){
       return new DecimalFormat("#.##").format(d);
    }

    public static String formatSize(long size) {


        double B = 1 * 8;
        double kibit = 1024;
        double KiB = B * kibit;
        double MiB = KiB * kibit;
        double GiB = MiB * kibit;
        double TiB = GiB * kibit;
        double Pib = TiB * kibit;

        if (size < kibit) {
            return size + " byte";

        } else if (size < KiB) {
            double result = size / kibit;
            return floatForm (result) + " Kibit";

        } else if (size < MiB) {
            double result = size / KiB;
            return floatForm (result) + " KiB";

        } else if (size < GiB) {
            double result = size / MiB;
            return floatForm (result) + " MiB";

        } else if (size < TiB) {
            double result = size / GiB;
            return floatForm (result) + " GiB";

        } else if (size < Pib) {
            double result = size / TiB;
            return floatForm (result) + " TiB";
        }

        return "";
    }

}

these are my inputs and expect outputs这些是我的输入并期望输出

Input Output输入 Output

2147483647          2.00 GiB
123                 123 bytes
83647               81.69 KiB
9585631             9.14 MiB
188900977659375     171.80 TiB

but when my code runs it gives different outputs但是当我的代码运行时,它会给出不同的输出

    256 MiB
    123 byte
    10.21 KiB
    1.14 MiB
    21.48 TiB

Am I getting wrong?我错了吗? or something或者其他的东西

You're dividing by bits but your input is already in bytes, not bits.您正在按位除,但您的输入已经是字节,而不是位。 So except for the < KB calculation you're ending up with results that are all 1/8th of the expected size calculations.因此,除了 < KB 计算之外,您最终得到的结果都是预期大小计算的 1/8。

Give the following code a whirl (print statements added just to sanity check the divisors):试一试以下代码(添加打印语句只是为了检查除数):

        double KiB = Math.pow(2, 10);
        double MiB = Math.pow(2, 20);
        double GiB = Math.pow(2, 30);
        double TiB = Math.pow(2, 40);
        double Pib = Math.pow(2, 50);

        NumberFormat df = DecimalFormat.getInstance();
        System.out.println("KiB: " + df.format(KiB));
        System.out.println("MiB: " + df.format(MiB));
        System.out.println("GiB: " + df.format(GiB));
        System.out.println("TiB: " + df.format(TiB));
        System.out.println("Pib: " + df.format(Pib));

        if (size < KiB) {
            return size + " byte";

        } else if (size < MiB) {
            double result = size / KiB;
            return floatForm(result) + " KiB";

        /* remaining code is identical to yours */

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM