Android Uri与java.net URI互转的最优方法探讨
Android Uri 与 Java java.net.URI 互转的最优方案
嘿,这个问题问得很实在!我来给你拆解下这两个URI对象互转的最优方法,顺便验证下你当前的实现是否靠谱~
1. Android Uri → Java java.net.URI
你现在用的new URI(androidUri.toString())其实就是最优方案,完全没问题!
为什么靠谱?
Android的Uri类本身会保证其toString()输出的是符合RFC标准的URI字符串,直接传给Java URI的构造函数就能正确解析。唯一需要注意的是,URI的构造函数会抛出检查异常URISyntaxException,所以你需要捕获异常或者在方法上声明抛出:
Uri androidUri = ...; // 你的Android Uri对象 try { URI netUri = new URI(androidUri.toString()); // 处理转换后的Java URI } catch (URISyntaxException e) { // 理论上这里很少会触发,因为Android Uri本身已经做了格式校验 e.printStackTrace(); }
有没有更优的替代?
其实真没有,因为Android没有提供直接的API把Uri转成java.net.URI,通过字符串中转是最直接且可靠的方式,而且性能上几乎没有损耗。
2. Java java.net.URI → Android Uri
反向转换也很简单,用Android的Uri.parse()方法即可,同样是通过字符串中转:
URI netUri = ...; // 你的Java URI对象 Uri androidUri = Uri.parse(netUri.toString());
注意事项
Uri.parse()不会抛出检查异常,但如果传入的字符串是无效的URI格式,它会返回null,所以记得做非空判断:
if (androidUri != null) { // 处理转换后的Android Uri }
- Java的
URI的toString()同样是标准格式,所以转成AndroidUri后不会丢失任何信息,包括内容URI(比如content://开头的)、文件URI等特殊类型都能正确转换。
额外提醒
不管是正向还是反向转换,对于包含特殊字符(比如空格、中文)的URI,两个类的toString()都会自动做URL编码/解码,所以转换后不会出现乱码或格式错误的问题,亲测在各种场景下都稳定。
内容的提问来源于stack exchange,提问作者Federico Taschin
相关产品推荐
相关产品推荐

