1. /**
    2. * @author shizi
    3. * @since 2021-08-17 10:56:16
    4. */
    5. public enum ByteUnit {
    6. B {
    7. public long toByte() {return 1;}
    8. public String transToString(long size) {
    9. if (size < UNIT) {
    10. return size + "B ";
    11. } else {
    12. return KB.transToString(size >> MARK_NUM) + (size & MARK) + "B";
    13. }
    14. }
    15. },
    16. KB {
    17. public long toByte() {return UNIT;}
    18. public String transToString(long size) {
    19. if (size < UNIT) {
    20. return size + "KB ";
    21. } else {
    22. return MB.transToString(size >> MARK_NUM) + (size & MARK) + "KB ";
    23. }
    24. }
    25. },
    26. MB {
    27. public long toByte() {return UNIT * KB.toByte();}
    28. public String transToString(long size) {
    29. if (size < UNIT) {
    30. return size + "MB ";
    31. } else {
    32. return GB.transToString(size >> MARK_NUM) + "" + (size & MARK) + "MB ";
    33. }
    34. }
    35. },
    36. GB {
    37. public long toByte() {return UNIT * MB.toByte();}
    38. public String transToString(long size) {
    39. if (size < UNIT) {
    40. return size + "GB ";
    41. } else {
    42. return TB.transToString(size >> MARK_NUM) + "" + (size & MARK) + "GB ";
    43. }
    44. }
    45. },
    46. TB {
    47. public long toByte() {return UNIT * GB.toByte();}
    48. public String transToString(long size) {
    49. if (size < UNIT) {
    50. return size + "TB ";
    51. } else {
    52. return PB.transToString(size >> MARK_NUM) + "" + (size & MARK) + "TB ";
    53. }
    54. }
    55. },
    56. PB {
    57. public long toByte() {return UNIT * TB.toByte();}
    58. public String transToString(long size) {
    59. if (size < UNIT) {
    60. return size + "PB ";
    61. } else {
    62. return EB.transToString(size >> MARK_NUM) + "" + (size & MARK) + "PB ";
    63. }
    64. }
    65. },
    66. EB {
    67. public long toByte() {return UNIT * PB.toByte();}
    68. public String transToString(long size) {
    69. if (size < UNIT) {
    70. return size + "EB ";
    71. } else {
    72. return ZB.transToString(size >> MARK_NUM) + "" + (size & MARK) + "EB ";
    73. }
    74. }
    75. },
    76. ZB {
    77. public long toByte() {return UNIT * EB.toByte();}
    78. public String transToString(long size) {
    79. if (size < UNIT) {
    80. return size + "ZB ";
    81. } else {
    82. return YB.transToString(size >> MARK_NUM) + "" + (size & MARK) + "ZB ";
    83. }
    84. }
    85. },
    86. YB {
    87. public long toByte() {return UNIT * ZB.toByte();}
    88. public String transToString(long size) {
    89. if (size < UNIT) {
    90. return size + "YB ";
    91. } else {
    92. return BB.transToString(size >> MARK_NUM) + "" + (size & MARK) + "YB ";
    93. }
    94. }
    95. },
    96. BB {
    97. public long toByte() {return UNIT * YB.toByte();}
    98. public String transToString(long size) {
    99. if (size < UNIT) {
    100. return size + "BB ";
    101. } else {
    102. return NB.transToString(size >> MARK_NUM) + "" + (size & MARK) + "BB ";
    103. }
    104. }
    105. },
    106. NB {
    107. public long toByte() {return UNIT * BB.toByte();}
    108. public String transToString(long size) {
    109. if (size < UNIT) {
    110. return size + "NB ";
    111. } else {
    112. return DB.transToString(size >> MARK_NUM) + "" + (size & MARK) + "NB ";
    113. }
    114. }
    115. },
    116. DB {
    117. public long toByte() {return UNIT * NB.toByte();}
    118. public String transToString(long size) {
    119. return size + "DB";
    120. }
    121. };
    122. /**
    123. * 掩码的个数
    124. */
    125. private static final int MARK_NUM = 10;
    126. /**
    127. * 单位 UNIT
    128. */
    129. private static final int UNIT = 1 << MARK_NUM;
    130. /**
    131. * 掩码
    132. */
    133. private static final long MARK = ~(-1L << MARK_NUM);
    134. public long toByte() {
    135. throw new AbstractMethodError();
    136. }
    137. public String transToString(long size) {
    138. throw new AbstractMethodError();
    139. }
    140. /**
    141. * 解析转换为字符,比如:101232432321L 转换为:94G 286M 789K 193B
    142. * @param size 待转换的字节数
    143. * @return 字符
    144. */
    145. public static String parse(long size) {
    146. return B.transToString(size);
    147. }
    148. }