中文字幕在线观看,亚洲а∨天堂久久精品9966,亚洲成a人片在线观看你懂的,亚洲av成人片无码网站,亚洲国产精品无码久久久五月天

硬盤大小轉(zhuǎn)換(B,KB,MB,GB,TB,PB之間的大小轉(zhuǎn)換) 的Java工具類

2018-07-20    來源:open-open

容器云強(qiáng)勢上線!快速搭建集群,上萬Linux鏡像隨意使用
java程序員在實(shí)際的開發(fā)中會遇到很多的單位換算問題。今天我給大家?guī)淼氖顷P(guān)于計(jì)算機(jī)硬盤大小的換算。多數(shù)情況下,一般要求 b,kb,mb,gb,tb,pb之間的大小轉(zhuǎn)換,我們都知道他們之間的換算是乘以1024或者除以1024。但是具體怎么用java代碼來實(shí)現(xiàn)呢?請看 下面的代碼:
    package com.herman.utils;  
      
    /*** 
     * @see 存儲大小(單位)轉(zhuǎn)換器. 
     * @author Herman.Xiong 
     * @date 2014年5月27日 13:27:40 
     * @version V1.0 
     */  
    public enum SizeConverter {  
        /** 轉(zhuǎn)換任意單位的大小, 返回結(jié)果會包含兩位小數(shù)但不包含單位. */  
        Arbitrary {  
            @Override  
            public String convert(float size) {  
                while (size > 1024) {  
                    size /= 1024;  
                }  
                return String.format(FORMAT_F, size);  
            }  
        },  
          
        // -----------------------------------------------------------------------  
        // 有單位  
        /** 轉(zhuǎn)換單位為B的大小, 返回結(jié)果會包含兩位小數(shù)以及單位. 如: 1024B->1KB, (1024*1024)B->1MB */  
        B {  
            @Override  
            public String convert(float B) {  
                return converter(0, B);  
            }  
        },  
        /** 轉(zhuǎn)換單位為B的大小, 返回結(jié)果會包含兩位小數(shù)以及單位. */  
        KB {  
            @Override  
            public String convert(float KB) {  
                return converter(1, KB);  
            }  
        },  
        /** 轉(zhuǎn)換單位為MB的大小, 返回結(jié)果會包含兩位小數(shù)以及單位. */  
        MB {  
            @Override  
            public String convert(float MB) {  
                return converter(2, MB);  
            }  
        },  
        /** 轉(zhuǎn)換單位為GB的大小, 返回結(jié)果會包含兩位小數(shù)以及單位. */  
        GB {  
            @Override  
            public String convert(float GB) {  
                return converter(3, GB);  
            }  
        },  
        /** 轉(zhuǎn)換單位為TB的大小, 返回結(jié)果會包含兩位小數(shù)以及單位. */  
        TB {  
            @Override  
            public String convert(float TB) {  
                return converter(4, TB);  
            }  
        },  
          
        // -----------------------------------------------------------------------  
        // trim沒單位  
        /** 轉(zhuǎn)換任意單位的大小, 返回結(jié)果小數(shù)部分為0時(shí)將去除兩位小數(shù), 不包含單位. */  
        ArbitraryTrim {  
            @Override  
            public String convert(float size) {  
                while (size > 1024) {  
                    size /= 1024;  
                }  
      
                int sizeInt = (int) size;  
                boolean isfloat = size - sizeInt > 0.0F;  
                if (isfloat) {  
                    return String.format(FORMAT_F, size);  
                }  
                return String.format(FORMAT_D, sizeInt);  
            }  
        },  
          
        // -----------------------------------------------------------------------  
        // trim有單位  
        /** 轉(zhuǎn)換單位為B的大小, 返回結(jié)果小數(shù)部分為0時(shí)將去除兩位小數(shù), 會包含單位. */  
        BTrim {  
            @Override  
            public String convert(float B) {  
                return trimConverter(0, B);  
            }  
        },  
        /** 轉(zhuǎn)換單位為KB的大小, 返回結(jié)果小數(shù)部分為0時(shí)將去除兩位小數(shù), 會包含單位. */  
        KBTrim {  
            @Override  
            public String convert(float KB) {  
                return trimConverter(1, KB);  
            }  
        },  
        /** 轉(zhuǎn)換單位為MB的大小, 返回結(jié)果小數(shù)部分為0時(shí)將去除兩位小數(shù), 會包含單位. */  
        MBTrim {  
            @Override  
            public String convert(float MB) {  
                return trimConverter(2, MB);  
            }  
        },  
        /** 轉(zhuǎn)換單位為GB的大小, 返回結(jié)果小數(shù)部分為0時(shí)將去除兩位小數(shù), 會包含單位. */  
        GBTrim {  
            @Override  
            public String convert(float GB) {  
                return trimConverter(3, GB);  
            }  
        },  
        /** 轉(zhuǎn)換單位為TB的大小, 返回結(jié)果小數(shù)部分為0時(shí)將去除兩位小數(shù), 會包含單位. */  
        TBTrim {  
            @Override  
            public String convert(float TB) {  
                return trimConverter(4, TB);  
            }  
        };  
        /*** 
         * <p> 將指定的大小轉(zhuǎn)換到1024范圍內(nèi)的大小. 注意該方法的最大單位為PB, 最小單位為B,  
         * 任何超出該范圍的單位最終會顯示為**. </p> 
         *  
         * @param size 要轉(zhuǎn)換的大小, 注意是浮點(diǎn)數(shù), 不要以整形的方式傳入, 容易造成溢出. 
         *         (如: 1024*1024*1024*1024*1024會溢出, 使結(jié)果為0, 因?yàn)樗葘⒔Y(jié)果以int相乘后再轉(zhuǎn)換為float;  
         *         而1024.0F*1024.0F*1024.0F*1024.0F*1024.0F就不會溢出) 
         * @return 
         */  
        abstract public String convert(float size);  
          
        // -----------------------------------------------------------------------  
        // 單位轉(zhuǎn)換  
          
        private static final String[] UNITS = new String[] {  
            "B", "KB", "MB", "GB", "TB", "PB", "**"  
        };  
          
        private static final int LAST_IDX = UNITS.length-1;  
          
        private static final String FORMAT_F = "%1$-1.2f";  
        private static final String FORMAT_F_UNIT = "%1$-1.2f%2$s";  
          
        private static final String FORMAT_D = "%1$-1d";  
        private static final String FORMAT_D_UNIT = "%1$-1d%2$s";  
          
        // -----------------------------------------------------------------------  
        private static String converter(int unit, float size) {  
            int unitIdx = unit;  
            while (size > 1024) {  
                unitIdx++;  
                size /= 1024;  
            }  
            int idx = unitIdx < LAST_IDX ? unitIdx : LAST_IDX;  
            return String.format(FORMAT_F_UNIT, size, UNITS[idx]);  
        }  
          
        private static String trimConverter(int unit, float size) {  
            int unitIdx = unit;  
            while (size > 1024) {  
                unitIdx++;  
                size /= 1024;  
            }  
      
            int sizeInt = (int) size;  
            boolean isfloat = size - sizeInt > 0.0F;  
            int idx = unitIdx < LAST_IDX ? unitIdx : LAST_IDX;  
            if (isfloat) {  
                return String.format(FORMAT_F_UNIT, size, UNITS[idx]);  
            }  
            return String.format(FORMAT_D_UNIT, sizeInt, UNITS[idx]);  
        }  
          
        // -----------------------------------------------------------------------  
        public static String convertBytes(float B, boolean trim) {  
            return trim ? trimConvert(0, B, true) : convert(0, B, true);  
        }  
          
        public static String convertKB(float KB, boolean trim) {  
            return trim ? trimConvert(1, KB, true) : convert(1, KB, true);  
        }  
          
        public static String convertMB(float MB, boolean trim) {  
            return trim ? trimConvert(2, MB, true) : convert(2, MB, true);  
        }  
          
        /*** 
         * <p> 存儲大小單位間的轉(zhuǎn)換. 注意該方法的最大單位為PB, 最小單位為B,  
         * 任何超出該范圍的單位最終會顯示為**. </p> 
         *  
         * @param unit 從哪個(gè)單位開始 
         * @param size 存儲大小, 注意是float, 不要以整形的形式傳入, 否則會溢出(如:1024*1024這種, 
         * 它是先將1024*1024作為int相乘再轉(zhuǎn)換為float的, 如果值過大的話就會溢出了,  
         * 所以這么寫1024.0F*1024.0F) 
         * @param withUnit 返回的結(jié)果字符串是否帶有對應(yīng)的單位 
         * @return 
         */  
        private static String convert(int unit, float size, boolean withUnit) {  
            int unitIdx = unit;  
            while (size > 1024) {  
                unitIdx++;  
                size /= 1024;  
            }  
            if (withUnit) {  
                int idx = unitIdx < LAST_IDX ? unitIdx : LAST_IDX;  
                return String.format(FORMAT_F_UNIT, size, UNITS[idx]);  
            }  
            return String.format(FORMAT_F, size);  
        }  
          
        /*** 
         * <p> 存儲大小單位間的轉(zhuǎn)換, 如果轉(zhuǎn)換后小數(shù)部分為0, 則去除小數(shù)部分.  
         * 注意該方法的最大單位為PB, 最小單位為B, 任何超出該范圍的單位最終會顯示為**. </p> 
         *  
         * @param unit 從哪個(gè)單位開始 
         * @param size 存儲大小, 注意是float, 不要以整形的形式傳入, 否則會溢出(如:1024*1024這種, 
         * 它是先將1024*1024作為int相乘再轉(zhuǎn)換為float的, 如果值過大的話就會溢出了,  
         * 所以這么寫1024.0F*1024.0F) 
         * @param withUnit 返回的結(jié)果字符串是否帶有對應(yīng)的單位 
         * @return 
         */  
        private static String trimConvert(int unit, float size, boolean withUnit) {  
            int unitIdx = unit;  
            while (size > 1024) {  
                unitIdx++;  
                size /= 1024;  
            }  
      
            int sizeInt = (int) size;  
            boolean isfloat = size - sizeInt > 0.0F;  
            if (withUnit) {  
                int idx = unitIdx < LAST_IDX ? unitIdx : LAST_IDX;  
                if (isfloat) {  
                    return String.format(FORMAT_F_UNIT, size, UNITS[idx]);  
                }  
                return String.format(FORMAT_D_UNIT, sizeInt, UNITS[idx]);  
            }  
      
            if (isfloat) {  
                return String.format(FORMAT_F, size);  
            }  
            return String.format(FORMAT_D, sizeInt);  
        }  
    }  

工具類代碼寫好了,我們來看一個(gè)測試類吧,上代碼:
    package com.herman.test;  
      
    import com.herman.utils.SizeConverter;  
    /** 
     * @see 硬盤大小換算測試類 
     * @author Herman.Xiong 
     * @date 2014年5月27日 13:43:33 
     */  
    public class SizeConverterTest {  
        public static void main(String[] args) {  
            System.out.println(SizeConverter.MBTrim.convert(419562f));  
        }  
    }  
來自:http://blog.csdn.net/xmtblog/article/details/27194021

標(biāo)簽: 代碼

版權(quán)申明:本站文章部分自網(wǎng)絡(luò),如有侵權(quán),請聯(lián)系:west999com@outlook.com
特別注意:本站所有轉(zhuǎn)載文章言論不代表本站觀點(diǎn)!
本站所提供的圖片等素材,版權(quán)歸原作者所有,如需使用,請與原作者聯(lián)系。

上一篇:NSfileManager的使用方法

下一篇:Android旋轉(zhuǎn)動畫xml配置