프로그래밍 언어/JAVA

Java에서 바이트 크기를 사람이 읽을 수있는 형식으로 변환하는 방법

Rateye 2021. 7. 14. 09:46
728x90
반응형

 

질문 : Java에서 바이트 크기를 사람이 읽을 수있는 형식으로 어떻게 변환 할 수 있습니까?

Java에서 바이트 크기를 사람이 읽을 수있는 형식으로 어떻게 변환 할 수 있습니까?

1024처럼 "1Kb"가되고 1024 * 1024는 "1Mb"가되어야합니다.

나는 각 프로젝트에 대해이 유틸리티 메소드를 작성하는 데 지겨워합니다. 이를 위해 Apache Commons 에 정적 방법이 있습니까?

답변

재미있는 사실 : 여기에 게시 된 원본 스 니펫은 Stack Overflow에서 역대 가장 많이 복사 된 Java 스 니펫이었으며 결함이있었습니다. 수정되었지만 더러워졌습니다. 이 기사의 전체 기사 : 가장 많이 복사 된 Stack Overflow 스 니펫은 결함이 있습니다!

재미있는 사실 : 여기에 게시 된 원본 스 니펫은 Stack Overflow에서 역대 가장 많이 복사 된 Java 스 니펫이었으며 결함이있었습니다. 수정되었지만 더러워졌습니다.

이 기사의 전체 기사 : 가장 많이 복사 된 Stack Overflow 스 니펫은 결함이 있습니다!

출처 : 바이트 크기를 사람이 읽을 수있는 형식으로 포맷 | 프로그래밍. 가이드 

 

Java: Formatting byte size to human readable format | Programming.Guide

 

programming.guide

 

SI (1 k = 1,000)

public static String humanReadableByteCountSI(long bytes) {
    if (-1000 < bytes && bytes < 1000) {
        return bytes + " B";
    }
    CharacterIterator ci = new StringCharacterIterator("kMGTPE");
    while (bytes <= -999_950 || bytes >= 999_950) {
        bytes /= 1000;
        ci.next();
    }
    return String.format("%.1f %cB", bytes / 1000.0, ci.current());
}

Binary (1 Ki = 1,024)

public static String humanReadableByteCountBin(long bytes) {
    long absB = bytes == Long.MIN_VALUE ? Long.MAX_VALUE : Math.abs(bytes);
    if (absB < 1024) {
        return bytes + " B";
    }
    long value = absB;
    CharacterIterator ci = new StringCharacterIterator("KMGTPE");
    for (int i = 40; i >= 0 && absB > 0xfffccccccccccccL >> i; i -= 10) {
        value >>= 10;
        ci.next();
    }
    value *= Long.signum(bytes);
    return String.format("%.1f %ciB", value / 1024.0, ci.current());
}

Example output:

                              SI     BINARY

                   0:        0 B        0 B
                  27:       27 B       27 B
                 999:      999 B      999 B
                1000:     1.0 kB     1000 B
                1023:     1.0 kB     1023 B
                1024:     1.0 kB    1.0 KiB
                1728:     1.7 kB    1.7 KiB
              110592:   110.6 kB  108.0 KiB
             7077888:     7.1 MB    6.8 MiB
           452984832:   453.0 MB  432.0 MiB
         28991029248:    29.0 GB   27.0 GiB
       1855425871872:     1.9 TB    1.7 TiB
 9223372036854775807:     9.2 EB    8.0 EiB   (Long.MAX_VALUE)
출처 : https://stackoverflow.com/questions/3758606/how-can-i-convert-byte-size-into-a-human-readable-format-in-java
728x90
반응형