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

 
  
//获取磁盘状态对象
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;


你可能感兴趣的:(android)