配置文件中提供解析带单位数字功能的工具类ByteNumber
来源:互联网 发布:金蝶旗舰版软件 编辑:程序博客网 时间:2024/05/14 15:11
这个小工具类可以将配置文件中设置的例如文件的大小限制之类的值转化为基本单位的数值,例如将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],大小写不敏感。
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); } }
- 配置文件中提供解析带单位数字功能的工具类ByteNumber
- latex中数字后面带单位的写法。
- CSS中line-height带单位与不带单位,带何种单位的区别
- 带逗号的数字(数字工具类)
- 手写从配置文件中读取信息并进行解析的工具类
- Spring提供的DomUtils解析工具
- CSS中line-height带单位与不带单位的区别
- 数字、时间等单位换算工具类收集
- 用java自带的工具类ResourceBundle类读取.properties配置文件的工具类
- java5中为多线程提供的同步工具类
- hbase-server-1.1.2.jar中提供的工具类
- swt中提供的复制粘贴功能.
- C#配置文件解析工具的实现
- 常用单位转换的工具类
- 一般的单位转换工具类
- hadoop0.21.0中提供的测试工具
- 对datagrid自带的数字分页的功能补充
- 利用ccstudio提供的工具解析出coff文件
- 如何妙用二级指针
- 服务器启动流程
- 黑马程序员_IO流——BufferedReader
- .net 通过NPOI或MyXls把DataTable导出到Excel
- 10W文本语义查询记录
- 配置文件中提供解析带单位数字功能的工具类ByteNumber
- 以蓝港王者之剑为例看手游必须接入的五种平台
- Oracle中中文、数字,英文混杂形式的字段进行排序的方法
- 黑马程序员_IO流——BufferedWriter
- ubuntu server 12.04 代理设置
- C++:do...while(0)另类使用方法
- H系列协议
- Uninstall Ad-Aware Antivirus with WindowsUninstaller.Org Removal Tips
- Java的几种对象(PO,VO,DAO,BO,POJO)解释(转载)