簡體   English   中英

如何將文件大小的人類可讀格式轉換為 Java 中的字節大小?

[英]How can I convert file size human-readable format into byte size in Java?

我基本上需要做相反的事情: 如何將字節大小轉換為 Java 中的人類可讀格式?
輸入:10.0MB
輸出:10000000

您可以使用這樣的枚舉

public static void main(String[] args) {

    System.out.println(10 * UNIT.calculateBytes("MB"));
}

enum UNIT {
    B(1000), KB(1000), MB(1000), GB(1000), TB(1000);

    private int timesThanPreviousUnit;

    UNIT(int timesThanPreviousUnit) {
        this.timesThanPreviousUnit = timesThanPreviousUnit;
    }

    public static long calculateBytes(String symbol) {
        long inBytes = 1;
        UNIT inputUnit = UNIT.valueOf(symbol);
        UNIT[] UNITList = UNIT.values();

        for (UNIT unit : UNITList) {
            if (inputUnit.equals(unit)) {
                return inBytes;
            }
            inBytes *= unit.timesThanPreviousUnit;
        }
        return inBytes;
    }
}

基於 HariHaravelan 的回答

public enum Unit {
    B(1), KB(1024), MB(1024*1024), GB((1024L*1024L*1024L)
    ;
    private final long multiplier;

    private Unit(long multiplier) {
        this.multiplier = multiplier;
    }
    
    // IllegalArgumentException if the symbol is not recognized
    public static long multiplier(String symbol) throws IllegalArgumentException {
        return Unit.valueOf(symbol.toUpperCase()).multiplier;
    }
}

用作
long bytes = (long) (10.0 * Unit.multiplier("MB"))


對於科學單位 (KB = 1000),替換enum中的第一行(Java 忽略數字之間的下划線):

public enum Unit {
    B(1), KB(1_000), MB(1_000_000), GB((1_000_000_000)
    ... rest as above

可以根據需要添加更多單位 - 直到long的限制,如果需要更多, multiplier聲明可以根據用例/要求更改為BigDecimaldouble

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM