Android 格式化存储之Formatter

news/2024/11/20 9:24:03/

格式化存储相关的数值时,可以用 android.text.format.Formatter

Formatter.formatFileSize(Context context, long sizeBytes)

源码说明,在 Android O 后,存储单位的进制是 1000 ,Android N 之前单位进制是 1024 。

/*** Formats a content size to be in the form of bytes, kilobytes, megabytes, etc.** <p>As of O, the prefixes are used in their standard meanings in the SI system, so kB = 1000* bytes, MB = 1,000,000 bytes, etc.</p>** <p class="note">In {@link android.os.Build.VERSION_CODES#N} and earlier, powers of 1024 are* used instead, with KB = 1024 bytes, MB = 1,048,576 bytes, etc.</p>** <p>If the context has a right-to-left locale, the returned string is wrapped in bidi* formatting characters to make sure it's displayed correctly if inserted inside a* right-to-left string. (This is useful in cases where the unit strings, like "MB", are* left-to-right, but the locale is right-to-left.)</p>** @param context Context to use to load the localized units* @param sizeBytes size value to be formatted, in bytes* @return formatted string with the number*/public static String formatFileSize(@Nullable Context context, long sizeBytes) {return formatFileSize(context, sizeBytes, FLAG_SI_UNITS);}

它采用四舍五入,保留两位小数,自动补全 kB 、MB、GB 等单位。
示例,注释即是运行结果

	private void testFormatFileSize(){long size0 = 1000; // 1.00 kBlong size1 = 1024; // 1.02 kBlong size2 = 1000 * 1000; // 1.00 MBlong size3 = 1000 * 1000 * 1000; // 1.00 GBlong size4 = size3 + 30 * size2; // 1.03 GBlong size5 = size3 + 519 * size2; //  1.52 GBString result0 = Formatter.formatFileSize(MainActivity.this, size0);String result1 = Formatter.formatFileSize(MainActivity.this, size1);String result2 = Formatter.formatFileSize(MainActivity.this, size2);String result3 = Formatter.formatFileSize(MainActivity.this, size3);String result4 = Formatter.formatFileSize(MainActivity.this, size4);String result5 = Formatter.formatFileSize(MainActivity.this, size5);Log.d("test" , "[MainActivity] -- formatFileSize -- result0 : " + result0);Log.d("test" , "[MainActivity] -- formatFileSize -- result1 : " + result1);Log.d("test" , "[MainActivity] -- formatFileSize -- result2 : " + result2);Log.d("test" , "[MainActivity] -- formatFileSize -- result3 : " + result3);Log.d("test" , "[MainActivity] -- formatFileSize -- result4 : " + result4);Log.d("test" , "[MainActivity] -- formatFileSize -- result5 : " + result5);}

Formatter.formatShortFileSize(Context context, long sizeBytes)

源码说明,

/*** Like {@link #formatFileSize}, but trying to generate shorter numbers* (showing fewer digits of precision).*/public static String formatShortFileSize(@Nullable Context context, long sizeBytes) {if (context == null) {return "";}final BytesResult res = formatBytes(context.getResources(), sizeBytes,FLAG_SI_UNITS | FLAG_SHORTER);return bidiWrap(context, context.getString(com.android.internal.R.string.fileSizeSuffix,res.value, res.units));}

它采用四舍五入,保留一位小数,自动补全 kB 、MB、GB 等单位。
示例,注释即是运行结果

	private void testFormatShortFileSize(){long size0 = 1000; // 1.0 kBlong size1 = 1024; // 1.0 kBlong size2 = 1000 * 1000; // 1.0 MBlong size3 = 1000 * 1000 * 1000; // 1.0 GBlong size4 = size3 + 256 * size2; // 1.3 GBString result0 = Formatter.formatShortFileSize(MainActivity.this, size0);String result1 = Formatter.formatShortFileSize(MainActivity.this, size1);String result2 = Formatter.formatShortFileSize(MainActivity.this, size2);String result3 = Formatter.formatShortFileSize(MainActivity.this, size3);String result4 = Formatter.formatShortFileSize(MainActivity.this, size4);Log.d("test" , "[MainActivity] -- testFormatShortFileSize -- result0 : " + result0);Log.d("test" , "[MainActivity] -- testFormatShortFileSize -- result1 : " + result1);Log.d("test" , "[MainActivity] -- testFormatShortFileSize -- result2 : " + result2);Log.d("test" , "[MainActivity] -- testFormatShortFileSize -- result3 : " + result3);Log.d("test" , "[MainActivity] -- testFormatShortFileSize -- result4 : " + result4);}

http://www.ppmy.cn/news/1112816.html

相关文章

java 字符串只保留数字、字母、中文

public static void main(String[] args) {String str "测 试 WG23-D";// 只留字母String s1 str.replaceAll("[^a-zA-Z]", "");// 只留数字String s2 str.replaceAll("[^0-9]", "");// 只留中文String s3 str.replaceA…

ES6-解构赋值

可以将值从数组或属性从对象提取道不同的变量中。 交换变量 let a 1 let b 2 [ a, b ] [ b, a ]//a2,b1 数组 const arr [1,2,3,4]; let [a,b,c,d] arr;//a1,b2,c3,d4 let [foo] []; let [bar, foo] [1];//bar1,fooundefined 防止从数组中取出一个值为undefined的对…

强大的JTAG边界扫描(5):FPGA边界扫描应用

文章目录 1. 获取芯片的BSDL文件2. 硬件连接3. 边界扫描测试4. 总结 上一篇文章&#xff0c;介绍了基于STM32F103的JTAG边界扫描应用&#xff0c;演示了TopJTAG Probe软件的应用&#xff0c;以及边界扫描的基本功能。本文介绍基于Xilinx FPGA的边界扫描应用&#xff0c;两者几乎…

JavaEE 网络原理——TCP的工作机制(初篇 包含 UDP 协议的再次阐述)

文章目录 一、再次简述 UDP 协议二、再次简述 TCP 协议三、描述部分 TCP 内部的工作机制1. 确认应答2. 超时重传 前提&#xff1a; 在前面的文章中&#xff0c;我向大家分别简单介绍了 TCP 协议和 UDP 包装一个数据形成数据报发送信息。 除此之外&#xff0c;还通过代码编写了 …

车载信息安全

车载信息安全是指保护车辆内部信息系统和数据不受未经授权的访问、使用、泄露、篡改或破坏的措施。随着汽车行业的快速发展&#xff0c;车载信息系统已经成为现代汽车的重要组成部分&#xff0c;为驾驶员提供了导航、娱乐、通信等功能。然而&#xff0c;这些系统也可能成为黑客…

数据结构---链表(java)

目录 1. 链表 2. 创建Node 3. 增加 4. 获取元素 5. 删除 6. 遍历链表 7. 查找元素是否存在 8. 链栈的实现 9. 链队的实现 1. 链表 数据存放在"Node"结点中 优点&#xff1a;不用考虑扩容和缩容的问题&#xff0c;实现了动态存储数据 缺点&#xff1a;没有…

6- 华为云查看容器日志

1 查看位置 二 进入容器查看 ls cat main.py # 退出命令是 exit() 或者 quit() cat main.py 在docker使用该命令进入文件后的退出命令

【Unity 实用工具篇】✨ | 编辑器扩展插件 Odin Inspector,快速上手学习

前言【Unity 实用工具篇】✨ | 编辑器扩展插件 Odin Inspector,快速上手学习一、Odin Inspector插件1.1 介绍1.2 相关网站链接1.3 效果展示二、导入插件三、基础功能介绍四、快速上手4.1 Attributes 相关4.1.1 使用Attribute更好的显示数据。Title、BoxGroup、FoldoutGroup4.1…