程序猿都非常懒。你懂的!
java程序猿在实际的开发中会遇到非常多的单位换算问题。今天我给大家带来的是关于计算机硬盘大小的换算。多数情况下。一般要求b,kb,mb,gb,tb,pb之间的大小转换,我们都知道他们之间的换算是乘以1024或者除以1024。可是详细怎么用java代码来实现呢?请看以下的代码:
package com.herman.utils; /***
* @see 存储大小(单位)转换器.
* @author Herman.Xiong
* @date 2014年5月27日 13:27:40
* @version V1.0
*/
public enum SizeConverter {
/** 转换随意单位的大小, 返回结果会包括两位小数但不包括单位. */
Arbitrary {
@Override
public String convert(float size) {
while (size > 1024) {
size /= 1024;
}
return String.format(FORMAT_F, size);
}
}, // -----------------------------------------------------------------------
// 有单位
/** 转换单位为B的大小, 返回结果会包括两位小数以及单位. 如: 1024B->1KB, (1024*1024)B->1MB */
B {
@Override
public String convert(float B) {
return converter(0, B);
}
},
/** 转换单位为B的大小, 返回结果会包括两位小数以及单位. */
KB {
@Override
public String convert(float KB) {
return converter(1, KB);
}
},
/** 转换单位为MB的大小, 返回结果会包括两位小数以及单位. */
MB {
@Override
public String convert(float MB) {
return converter(2, MB);
}
},
/** 转换单位为GB的大小, 返回结果会包括两位小数以及单位. */
GB {
@Override
public String convert(float GB) {
return converter(3, GB);
}
},
/** 转换单位为TB的大小, 返回结果会包括两位小数以及单位. */
TB {
@Override
public String convert(float TB) {
return converter(4, TB);
}
}, // -----------------------------------------------------------------------
// trim没单位
/** 转换随意单位的大小, 返回结果小数部分为0时将去除两位小数, 不包括单位. */
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有单位
/** 转换单位为B的大小, 返回结果小数部分为0时将去除两位小数, 会包括单位. */
BTrim {
@Override
public String convert(float B) {
return trimConverter(0, B);
}
},
/** 转换单位为KB的大小, 返回结果小数部分为0时将去除两位小数, 会包括单位. */
KBTrim {
@Override
public String convert(float KB) {
return trimConverter(1, KB);
}
},
/** 转换单位为MB的大小, 返回结果小数部分为0时将去除两位小数, 会包括单位. */
MBTrim {
@Override
public String convert(float MB) {
return trimConverter(2, MB);
}
},
/** 转换单位为GB的大小, 返回结果小数部分为0时将去除两位小数, 会包括单位. */
GBTrim {
@Override
public String convert(float GB) {
return trimConverter(3, GB);
}
},
/** 转换单位为TB的大小, 返回结果小数部分为0时将去除两位小数, 会包括单位. */
TBTrim {
@Override
public String convert(float TB) {
return trimConverter(4, TB);
}
};
/***
* <p> 将指定的大小转换到1024范围内的大小. 注意该方法的最大单位为PB, 最小单位为B,
* 不论什么超出该范围的单位终于会显示为**. </p>
*
* @param size 要转换的大小, 注意是浮点数, 不要以整形的方式传入, easy造成溢出.
* (如: 1024*1024*1024*1024*1024会溢出, 使结果为0, 由于它先将结果以int相乘后再转换为float;
* 而1024.0F*1024.0F*1024.0F*1024.0F*1024.0F就不会溢出)
* @return
*/
abstract public String convert(float size); // -----------------------------------------------------------------------
// 单位转换 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> 存储大小单位间的转换. 注意该方法的最大单位为PB, 最小单位为B,
* 不论什么超出该范围的单位终于会显示为**. </p>
*
* @param unit 从哪个单位開始
* @param size 存储大小, 注意是float, 不要以整形的形式传入, 否则会溢出(如:1024*1024这样的,
* 它是先将1024*1024作为int相乘再转换为float的, 假设值过大的话就会溢出了,
* 所以这么写1024.0F*1024.0F)
* @param withUnit 返回的结果字符串是否带有相应的单位
* @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> 存储大小单位间的转换, 假设转换后小数部分为0, 则去除小数部分.
* 注意该方法的最大单位为PB, 最小单位为B, 不论什么超出该范围的单位终于会显示为**. </p>
*
* @param unit 从哪个单位開始
* @param size 存储大小, 注意是float, 不要以整形的形式传入, 否则会溢出(如:1024*1024这样的,
* 它是先将1024*1024作为int相乘再转换为float的, 假设值过大的话就会溢出了,
* 所以这么写1024.0F*1024.0F)
* @param withUnit 返回的结果字符串是否带有相应的单位
* @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);
}
}
工具类代码写好了。我们来看一个測试类吧,上代码:
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://download.csdn.net/detail/xmt1139057136/7407229
或者增加QQ群:135430763共同学习!
计算机硬盘大小转换(B,KB,MB,GB,TB,PB之间的大小转换)的更多相关文章
-
Java计算机硬盘大小转换(B,KB,MB,GB,TB,PB之间的大小转换)
程序员都很懒,你懂的! java程序员在实际的开发中会遇到很多的单位换算问题.今天我给大家带来的是关于计算机硬盘大小的换算.多数情况下,一般要求 b,kb,mb,gb,tb,pb之间的大小转换,我们都 ...
-
我的Android进阶之旅------>Java文件大小转换工具类 (B,KB,MB,GB,TB,PB之间的大小转换)
Java文件大小转换工具类 (B,KB,MB,GB,TB,PB之间的大小转换) 有时候要做出如下所示的展示文件大小的效果时候,需要对文件大小进行转换,然后再进行相关的代码逻辑编写. 下面是一个Java ...
-
计算机存储单位KB,MB,GB,TB,PB,EB,ZB,YB后面是什么?
关于计算机存储单位KB,MB,GB,TB,PB,EB,ZB,YB后面是什么? 我们知道Kb是1000的1次方,所以 MB就是1000的2次方(106) GB就是1000的3次方(109) TB就是10 ...
-
java B转换KB MB GB TB PB EB ZB
public static String readableFileSize(long size) { if (size <= 0) { return "0"; } final ...
-
Bit,Bytes,KB,MB,GB,TB,PB,EB,ZB,YB
Bit,Bytes,KB,MB,GB,TB,PB,EB,ZB,YB 汉字字符 2字节英文字符 1字节中文标点 2字节英文标点 1字节一个字节就是一个八位二进制数啊,2就是00000010,4就是000 ...
-
字节b换算kb/mb/gb/tb/pb
public static string HumanReadableFilesize(double size) { string[] units = new string[] { "B&qu ...
-
计算机 KB,MB,GB,TB,PB,EB 计算
ASCII码:一个英文字母(不分大小写)占一个字节的空间.一个二进制数字序列,在计算机中作为一个数字单元,一般为8位二进制数.换算为十进制,最小值-128,最大值127.如一个ASCII码就是一个字节 ...
-
b,B,KB,MB,GB,TB,PB,EB,ZB,YB,BB,NB,DB的含义,之间的关系
1bit=1位2进制信息 1B (byte 字节)1KB(Kilobyte 千字节)=2(10)B=1024B=2(10)B: 1MB(Megabyte 兆字节)=2(10)KB=1024KB=2(2 ...
-
JS数据容量单位转换(kb,mb,gb,tb)
JS代码如下: var size = '8164674'; function bytesToSize(bytes) { if (bytes === 0) return '0 B'; var k = 1 ...
随机推荐
-
memcached源码安装(linux和windows)
如果是在windows环境下编译安装,我这边是基于cygwin或msys2方式 安装cygwin环境,http://www.cnblogs.com/skey_chen/p/5765179.html 安 ...
-
opencv 人脸识别
背景知识 OpenCV 是一个开源的计算机视觉和机器学习库.它包含成千上万优化过的算法,为各种计算机视觉应用提供了一个通用工具包.根据这个项目的关于页面,OpenCV 已被广泛运用在各种项目上,从 ...
-
ux.plugin.ConTpl 模版元素监听扩展
/* *tpl模版加入按钮 *<div class="x-button-normal x-button x-iconalign-center x-layout-box-item x-s ...
-
让pre标签自动换行示例代码
pre 元素可定义预格式化的文本.被包围在 pre 元素中的文本通常会保留空格和换行符.而文本也会呈现为等宽字体. <pre> 标签的一个常见应用就是用来表示计算机的源代码.对于技术博客经 ...
-
SSO单点登录在web上的关键点 cookie跨域
概述 其实WEB单点登录的原理挺简单的,抛开那些复杂的概念,简单来讲讲如何实现一个最基本的单点登录 首先需要有两个程序 例如:http://www.site-a.com 我们简称A http://ww ...
-
MYSQL-实现ORACLE- row_number() over(partition by ) 分组排序功能
MYSQL-实现ORACLE- row_number() over(partition by ) 分组排序功能 由于MYSQL没有提供类似ORACLE中OVER()这样丰富的分析函数. 所以在MYSQ ...
-
让sublime text 3默认新建GBK文件
想让sublime text支持显示或者保存中文,需要安装插件convertToUTF8,具体安装可以问度娘. 安装插件以后,想让保存的html文件支持中文,可以通过ctrl+shift+C来完成.但 ...
-
Matlab求极限
matlab求极限(可用来验证度量函数或者隶属度函数)可用来验证是否收敛,取值范围等等. 一.问题来源 搜集聚类资料时,又看到了隶属度函数,没错,就是下面这个,期间作者提到m趋于2是,结果趋于1,我想 ...
-
【DP|多重背包可行性】POJ-1014 Dividing
Dividing Time Limit: 1000MS Memory Limit: 10000K Description Marsha and Bill own a collection of mar ...
-
GTID 跳过事物
Mysql5.7 stop slave; set @@SESSION.GTID_NEXT='507e80e9-3648-11e9-aa70-fa163e77a52d:20173'; begin; co ...