/**
* @author shizi
* @since 2021-08-17 10:56:16
*/
public enum ByteUnit {
B {
public long toByte() {return 1;}
public String transToString(long size) {
if (size < UNIT) {
return size + "B ";
} else {
return KB.transToString(size >> MARK_NUM) + (size & MARK) + "B";
}
}
},
KB {
public long toByte() {return UNIT;}
public String transToString(long size) {
if (size < UNIT) {
return size + "KB ";
} else {
return MB.transToString(size >> MARK_NUM) + (size & MARK) + "KB ";
}
}
},
MB {
public long toByte() {return UNIT * KB.toByte();}
public String transToString(long size) {
if (size < UNIT) {
return size + "MB ";
} else {
return GB.transToString(size >> MARK_NUM) + "" + (size & MARK) + "MB ";
}
}
},
GB {
public long toByte() {return UNIT * MB.toByte();}
public String transToString(long size) {
if (size < UNIT) {
return size + "GB ";
} else {
return TB.transToString(size >> MARK_NUM) + "" + (size & MARK) + "GB ";
}
}
},
TB {
public long toByte() {return UNIT * GB.toByte();}
public String transToString(long size) {
if (size < UNIT) {
return size + "TB ";
} else {
return PB.transToString(size >> MARK_NUM) + "" + (size & MARK) + "TB ";
}
}
},
PB {
public long toByte() {return UNIT * TB.toByte();}
public String transToString(long size) {
if (size < UNIT) {
return size + "PB ";
} else {
return EB.transToString(size >> MARK_NUM) + "" + (size & MARK) + "PB ";
}
}
},
EB {
public long toByte() {return UNIT * PB.toByte();}
public String transToString(long size) {
if (size < UNIT) {
return size + "EB ";
} else {
return ZB.transToString(size >> MARK_NUM) + "" + (size & MARK) + "EB ";
}
}
},
ZB {
public long toByte() {return UNIT * EB.toByte();}
public String transToString(long size) {
if (size < UNIT) {
return size + "ZB ";
} else {
return YB.transToString(size >> MARK_NUM) + "" + (size & MARK) + "ZB ";
}
}
},
YB {
public long toByte() {return UNIT * ZB.toByte();}
public String transToString(long size) {
if (size < UNIT) {
return size + "YB ";
} else {
return BB.transToString(size >> MARK_NUM) + "" + (size & MARK) + "YB ";
}
}
},
BB {
public long toByte() {return UNIT * YB.toByte();}
public String transToString(long size) {
if (size < UNIT) {
return size + "BB ";
} else {
return NB.transToString(size >> MARK_NUM) + "" + (size & MARK) + "BB ";
}
}
},
NB {
public long toByte() {return UNIT * BB.toByte();}
public String transToString(long size) {
if (size < UNIT) {
return size + "NB ";
} else {
return DB.transToString(size >> MARK_NUM) + "" + (size & MARK) + "NB ";
}
}
},
DB {
public long toByte() {return UNIT * NB.toByte();}
public String transToString(long size) {
return size + "DB";
}
};
/**
* 掩码的个数
*/
private static final int MARK_NUM = 10;
/**
* 单位 UNIT
*/
private static final int UNIT = 1 << MARK_NUM;
/**
* 掩码
*/
private static final long MARK = ~(-1L << MARK_NUM);
public long toByte() {
throw new AbstractMethodError();
}
public String transToString(long size) {
throw new AbstractMethodError();
}
/**
* 解析转换为字符,比如:101232432321L 转换为:94G 286M 789K 193B
* @param size 待转换的字节数
* @return 字符
*/
public static String parse(long size) {
return B.transToString(size);
}
}