file size 的大小计算

本文介绍了如何在Android环境中计算文件大小并将其转换为易于理解的格式,如KB、MB等,并展示了如何将当前进度转换为百分比形式,以便于在用户界面上展示下载或上传的进度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

file size 的大小计算:

 

String android.text.format.Formatter.formatFileSize(Context context, long number)

String apkSize = Formatter.formatFileSize( ,  );

 

 

//返回数组,下标1代表大小,下标2代表单位 KB/MB
    String[] filesize(long size){
        String str="";
        if(size>=1024){
            str="KB";
            size/=1024;
            if(size>=1024){
                str="MB";
                size/=1024;
            }
        }
        DecimalFormat formatter=new DecimalFormat();
        formatter.setGroupingSize(3);
        String result[] =new String[2];
        result[0]=formatter.format(size);
        result[1]=str;
        return result;
    }

 

private String size2string(long size){
  DecimalFormat df = new DecimalFormat("0.00");
  String mysize = "";
  if( size > 1024*1024){
    mysize = df.format( size / 1024f / 1024f ) +"M";
  }else if( size > 1024 ){
    mysize = df.format( size / 1024f ) +"K";
  }else{
    mysize = size + "B";
  }
  return mysize;
}


 

百分制转换

progress =(int)(((float)count / length) * 100);
		    	    
		    	    Log.d("test", "===进度====" + size2string(count) + "___" + progress + "%");

 

 

<think>好的,我现在需要帮用户解答关于Linux系统中内存文件大小计算方法和原理的问题。首先,我要理清楚用户的问题到底是什么。用户提到的是“内存文件”,可能指的是像/proc或/sys这样的内存文件系统里的文件,这些文件的数据存储在内存中,而不是磁盘上。根据引用[2],内存文件系统确实占用内存空间,比如/proc和/sys,读写这些文件实际上是操作内核数据。 接下来,用户想知道这些文件的大小是如何计算的。我需要分几个方面来考虑:首先,这些内存文件的大小可能由内核动态生成的数据决定,比如/proc/meminfo的大小会根据当前系统状态变化。其次,文件元数据中的大小信息可能与实际占用的内存不同,比如虚拟文件可能显示为0字节,但访问时会动态生成内容。此外,还需要讨论文件系统如何管理和报告这些文件的大小,以及用户如何通过命令如ls、du、stat来查看相关信息。 根据引用[3],文件系统除了存储实际数据,还包含很多属性,比如权限和所有者,这可能影响文件元数据中的大小显示。而引用[4]提到,进程不关心文件如何写入内存,物理内存到磁盘由驱动程序处理。不过这里用户关注的是内存中的文件,所以可能不需要考虑磁盘部分,但需要理解内存中文件数据的存储和管理机制。 用户可能还想知道为什么某些内存文件显示的大小与实际占用内存不一致,比如/proc/kcore可能显示很大,但实际占用内存可能不同。这里需要解释虚拟文件系统的特性,以及内核如何动态处理这些文件的数据。 最后,生成相关问题需要考虑用户可能进一步想了解的优化方法、实际应用中的注意事项,或者与其他文件系统的对比。需要确保问题覆盖用户可能的兴趣点,同时基于提供的引用内容,比如内存文件系统的类型、文件缓冲区的原理等。</think>### Linux内存文件大小计算原理 在Linux系统中,内存文件(如`/proc`和`sysfs`中的文件)的大小计算与传统磁盘文件不同,其核心原理与内核数据动态生成和虚拟文件系统特性相关。以下是关键机制分析: #### 1. **虚拟文件系统的动态性** 内存文件系统(如`procfs`、`sysfs`)通过内核接口动态生成文件内容,文件大小不固定。例如: - `/proc/meminfo`的大小由当前内存统计信息决定。 - `/proc/pid/maps`的大小取决于进程的内存映射条目数量。 这类文件的元数据(如`st_size`)可能显示为0或固定值,但实际读取时会触发内核回调函数动态生成内容[^2][^3]。 #### 2. **内核数据与内存占用的关系** 内存文件占用的物理内存分为两部分: - **元数据内存**:文件节点(inode)和目录结构占用固定内存。 - **内容内存**:文件内容可能共享内核数据结构(如`/proc/sys/kernel`的配置参数),不单独分配内存[^4]。 例如: ```bash # 查看/proc/meminfo的元数据(显示大小为0) stat /proc/meminfo ``` #### 3. **用户视角的文件大小** 通过不同工具观察到的大小可能矛盾: - `ls -l`显示文件元数据中的`st_size`,可能是内核预设值。 - `du -h`统计文件占用的磁盘块(对内存文件通常为0)。 - `cat file | wc -c`获取实际内容字节数,反映动态生成的实时数据量。 ```bash # 对比不同工具的结果 ls -l /proc/$$/status # 显示大小为0 cat /proc/$$/status | wc -c # 显示实际内容长度 ``` #### 4. **特殊文件的处理机制** - **稀疏文件**:如`/proc/kcore`(系统物理内存镜像)显示为虚拟大小(如128TB),实际仅存储元数据。 - **符号链接**:`/proc/pid/exe`链接到可执行文件路径,其大小由链接字符串长度决定。 --- ### 关键原理总结 1. **动态内容生成**:文件内容由内核函数实时生成,无预分配存储空间。 2. **元数据分离**:文件大小属性与实际内存占用无直接对应关系。 3. **零拷贝机制**:读取操作直接访问内核数据结构,避免内存重复占用。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值