我找到了很多关于将原始字节信息转换为人类可读格式的信息,但我需要做相反的事情,即将字符串“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
但是,用于解析您的输入的模式
- 不支持小数(因此,您可以使用
1GB
、2GB
、1638MB
,但不能使用1.6GB
) - 不支持空格(因此,您可以使用
1GB
但不能使用1GB
)
我建议坚持兼容性/易于维护性的约定。 但如果这不符合您的需求,您需要复制并编辑该文件 - 这是一个很好的起点。
关于Java - 将人类可读大小转换为字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16968587/