/** * @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); }}