android.text.format.Formatter调用formatFileSize后返回负值的原因

来源:互联网 发布:mac系统语言代码 编辑:程序博客网 时间:2024/06/05 23:48

//获取磁盘状态对象StatFs statFs = new StatFs(file.getPath());int blockSize = statFs.getBlockSize();//获取一个扇区的大小int blockCount = statFs.getBlockCount();//获取总的扇区的个数int availableBlocks = statFs.getAvailableBlocks();//获取可用的扇区的个数String totalMem = Formatter.formatFileSize(this, blockSize * blockCount);//总空间String availableMem = Formatter.formatFileSize(this, blockSize * availableBlocks);


按照以上代码运行的时候,在有些内存比较大的手机上就会出现totalMem为负数,为什么呢?

因为 blockSize*blockCout后还会是int类型,但是乘积过大,已经不能够装下乘积的值,会出现溢出,得到的值已经是错误的了。将各个数的类型用long接收即可


如下:

//获取磁盘状态对象StatFs statFs = new StatFs(file.getPath());long blockSize = statFs.getBlockSize();//获取一个扇区的大小long blockCount = statFs.getBlockCount();//获取总的扇区的个数long availableBlocks = statFs.getAvailableBlocks();//获取可用的扇区的个数String totalMem = Formatter.formatFileSize(this, blockSize * blockCount);//总空间String availableMem = Formatter.formatFileSize(this, blockSize * availableBlocks);return "总内存:" + totalMem + "        可用内存:" + availableMem;


1 0
原创粉丝点击