java字节单位转换

package com.run.util;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

public final class ByteUnitConversionUtil {
	
	private static BigDecimal kb=new BigDecimal("1000");
	private static BigDecimal kib=new BigDecimal("1024");
	private static BigDecimal base=new BigDecimal("1");
	private static List<BigDecimal> kbValue=new ArrayList<BigDecimal>();
	private static List<BigDecimal> kibValue=new ArrayList<BigDecimal>();
	private static String DEFAULT_FORMAT="%.5f";
	
	public static enum Units{
		B(0,false),
		KB(1,false),
		KiB(1,true),
		MB(2,false),
		MiB(2,true),
		GB(3,false),
		GiB(3,true),
		TB(4,false),
		TiB(4,true),
		PB(5,false),
		PiB(5,true),
		EB(6,false),
		EiB(6,true),
		ZB(7,false),
		ZiB(7,true),
		YB(8,false),
		YiB(8,true),
		BB(9,false),
		BiB(9,true),
		NB(10,false),
		NiB(10,true),
		DB(11,false),
		DiB(11,true);
		private int index;
		private boolean isKib; 
		private Units(int index, boolean isKib){
			this.index=index;
			this.isKib=isKib;
		}
		public int value(){
			return this.index;
		}
		
		public boolean isKib(){
			return this.isKib;
		}
		public boolean equals(Units other){
			return this.value()==other.value();
		}
	}
	
	private ByteUnitConversionUtil(){}
	static{
		init();
	};
	
	private static void init(){
		for(Units units:Units.values()){
			if(units.equals(Units.B)){
				kbValue.add(units.value(), base);
				kibValue.add(units.value(),base);
			}else if(units.isKib()){
				kibValue.add(units.value(),kibValue.get(units.value()-1).multiply(kib));
			}else{
				kbValue.add(units.value(), kbValue.get(units.value()-1).multiply(kb));
			}
		}
	}
	
	public static String convert(int value,Units unit){
		return convert(value,unit,DEFAULT_FORMAT);
	}
	public static String convert(int value,Units unit,String format){
		return convert(new BigDecimal(String.valueOf(value)),unit,format);
	}
	
	public static String convert(long value,Units unit){
		return convert(value,unit,DEFAULT_FORMAT);
	}
	public static String convert(long value,Units unit,String format){
		return convert(new BigDecimal(String.valueOf(value)),unit,format);
	}
	
	public static String convert(BigDecimal value,Units unit){
		return convert(value,unit,DEFAULT_FORMAT);
	}
	public static String convert(BigDecimal value,Units unit,String format){
		return doConvert(value,unit,format);
	}
	
	private static String doConvert(BigDecimal value,Units unit,String format){
		if(unit.equals(Units.B)){
			return value.toString().split("\\.",2)[0]+unit;
		}else{
			BigDecimal divisor= unit.isKib()?kibValue.get(unit.value()):kbValue.get(unit.value());
			return String.format(format,value.divide(divisor).doubleValue())+unit;
		}
	}

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值