配置文件中提供解析带单位数字功能的工具类ByteNumber
2013-07-08 15:32
459 查看
这个小工具类可以将配置文件中设置的例如文件的大小限制之类的值转化为基本单位的数值,例如将1.2K转化为1.2*1024
支持B,K[B],M[B],G[B],T[B]并且大小写不敏感,中括号中的字母为可选,如果给定的字符串无法正确解析,则获取的值为0;
通过一个数值或者一个正确的字符串构造ByteNumber对象,然后可以通过getValue()方法返回一个long值(小数会被忽略),也可以通过getValue(char)给定一个单位字符来获取在该单位下的数值,单位常量在类中,建议使用类中的常量来获取,支持[B|K|M|G|T],大小写不敏感。
支持B,K[B],M[B],G[B],T[B]并且大小写不敏感,中括号中的字母为可选,如果给定的字符串无法正确解析,则获取的值为0;
通过一个数值或者一个正确的字符串构造ByteNumber对象,然后可以通过getValue()方法返回一个long值(小数会被忽略),也可以通过getValue(char)给定一个单位字符来获取在该单位下的数值,单位常量在类中,建议使用类中的常量来获取,支持[B|K|M|G|T],大小写不敏感。
import java.util.HashMap; import java.util.Map; /** * 二进制数字类。 * * 支持从数值或者带单位的字符串中创建。 * * @author Sam * */ public final class ByteNumber { public static final Character UNIT_B = 'B'; public static final Character UNIT_K = 'K'; public static final Character UNIT_M = 'M'; public static final Character UNIT_G = 'G'; public static final Character UNIT_T = 'T'; /** 单位字母 */ private static final Map<Character, Long> UNIT_MAP; static { /* * 支持的单位集合:[B|K|M|G|T] */ UNIT_MAP = new HashMap<Character, Long>(); UNIT_MAP.put(UNIT_B, 1L); UNIT_MAP.put(UNIT_K, 1024L); UNIT_MAP.put(UNIT_M, UNIT_MAP.get(UNIT_K) * 1024); UNIT_MAP.put(UNIT_G, UNIT_MAP.get(UNIT_M) * 1024); UNIT_MAP.put(UNIT_T, UNIT_MAP.get(UNIT_G) * 1024); } private long value; /** * 通过任意数字来构造 * @param number */ public ByteNumber(Number value) { if (value == null) { return; } this.value = value.longValue(); } /** * 通过任意字符串来构造 * @param value */ public ByteNumber(String valueStr) { if (valueStr == null || valueStr.isEmpty()) { return; } valueStr = valueStr.toUpperCase(); // 统一转换为大写 if (valueStr.endsWith("B")) { valueStr = valueStr.substring(0, valueStr.length() - 1); } if (valueStr.isEmpty()) { // 判定以B结尾,去除后如果字符串为空,则当0处理 return; } Character lastChar = valueStr.charAt(valueStr.length() - 1); String valuePart = valueStr; Character unit = UNIT_B; // 默认单位为B if (UNIT_MAP.containsKey(lastChar)) { unit = lastChar; valuePart = valueStr.substring(0, valueStr.length() - 1); } if (valuePart.isEmpty()) { this.value = UNIT_MAP.get(unit); } try { double doubleValue = Double.parseDouble(valuePart); this.value = (long)(doubleValue * UNIT_MAP.get(unit)); // 转换成最终数值后将会舍去小数部分 } catch (NumberFormatException e) { } } public long getValue() { return value; } public double getValue(char unit) { unit = Character.toUpperCase(unit); if (!UNIT_MAP.containsKey(unit)) { throw new IllegalArgumentException("only B,K(B),M(B),G(B),T(B) are supported(case insensitive)!"); } return this.value * 1.0 / UNIT_MAP.get(unit); } }
相关文章推荐
- MD5工具类,提供字符串MD5加密(校验)、文件MD5值获取(校验)功能
- 为你的程序/系统提供强大的配置功能(选项配置文件的读写)
- C# 微软提供的 csv文件解析工具类 非常方便
- 机房收费系统总结之登录功能实例解析抽象工厂+配置文件
- 解析Cloudera Manager内部结构、功能包括配置文件、目录位置等
- 解析Cloudera Manager内部结构、功能包括配置文件、目录位置等
- MD5工具类,提供字符串MD5加密、文件MD5值获取(校验)功能
- MD5工具类,提供字符串MD5加密(校验)、文件MD5值获取(校验)功能
- activiti5.0.alpha1之配置文件的结构及功能解析
- 根据配置文件生成ServiceInfo对象,并对外提供最快的检索ServiceInfo的功能
- 【游戏服务器开发-准备篇】(三)构建自己的配置文件解析工具类
- Java工具类(三) 解析配置文件工具类
- 解析Cloudera Manager内部结构、功能包括配置文件、目录位置等
- 手写从配置文件中读取信息并进行解析的工具类
- 解析Cloudera Manager(CDH5)内部结构、功能包括配置文件、目录位置等
- 解析Cloudera Manager内部结构、功能包括配置文件、目录位置等
- 解析Cloudera Manager内部结构、功能包括配置文件、目录位置等
- 解析Cloudera Manager内部结构、功能包括配置文件、目录位置等
- .NET配置文件解析过程详解
- Spring xml配置文件头解析