Java - 将人类可读大小转换为字节

标签 java byte long-integer human-readable

我找到了很多关于将原始字节信息转换为人类可读格式的信息,但我需要做相反的事情,即将字符串“1.6 GB”转换为长值 1717990000。是否有内置的/明确的方法来做到这一点,还是我几乎必须自己动手?

[编辑]:这是我的第一次尝试......

static class ByteFormat extends NumberFormat {
    @Override
    public StringBuffer format(double arg0, StringBuffer arg1, FieldPosition arg2) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public StringBuffer format(long arg0, StringBuffer arg1, FieldPosition arg2) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public Number parse(String arg0, ParsePosition arg1) {
        return parse (arg0);
    }

    @Override
    public Number parse(String arg0) {
        int spaceNdx = arg0.indexOf(" ");
        double ret = Double.parseDouble(arg0.substring(0, spaceNdx));
        String unit = arg0.substring(spaceNdx + 1);
        int factor = 0;
        if (unit.equals("GB")) {
            factor = 1073741824;
        }
        else if (unit.equals("MB")) {
            factor = 1048576;
        }
        else if (unit.equals("KB")) {
            factor = 1024;
        }

        return ret * factor;
    }
}

最佳答案

Spring Framework 在 5.1 版中添加了一个 DataSize 类,它允许将人类可读的数据大小解析为字节,并将它们格式化回人类可读的形式。可以查到here .

如果你使用Spring Framework,你可以升级到>=5.1并使用这个类。否则,您可以 c/p 它和相关类(同时遵守许可证)。

然后就可以使用了:

DataSize dataSize = DataSize.parse("16GB");
System.out.println(dataSize.toBytes());

将给出输出:

17179869184

但是,用于解析您的输入的模式

  • 不支持小数(因此,您可以使用1GB2GB1638MB,但不能使用1.6GB)
  • 不支持空格(因此,您可以使用 1GB 但不能使用 1GB)

我建议坚持兼容性/易于维护性的约定。 但如果这不符合您的需求,您需要复制并编辑该文件 - 这是一个很好的起点。

关于Java - 将人类可读大小转换为字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16968587/

相关文章:

java - 包含 k 个列表中每个列表中至少一个数字的最小范围

java - 将两个字节读入一个整数?

python - 在 Python 中使用 long() 时出现 ValueError

java - 具有长值的 TreeSet 自定义比较器

java - 如何通过将它们转换为 long 来减去两次

java - Android:显示进度条对话框时出现问题?

java - 如何找到从0到180和-180到0的最近角度

java - 如何更新 JLabel 中的 ImageIcon?

c -\x6d\xe3\x85 是什么意思?

c# - 将数据类型 'long' 转换为字节数组