//获取磁盘状态对象 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应用中获取磁盘状态时遇到的问题:由于整型溢出导致的内存计算错误。文中提供了修改前后的代码示例,并解释了如何通过使用long类型变量来避免整型溢出。
2177

被折叠的 条评论
为什么被折叠?



