项目里用到了许多Uri,Url,Urn相关东西,一直对其的定义模糊不清,趁迭代开发周期,对一些模糊的东西弄清楚
内容主要参考自http://www.cnblogs.com/gaojing/archive/2012/02/04/2413626.html
http://blog.csdn.net/harvic880925/article/details/44679239
- Uri,uniform resource identifier 既统一资源标识符,是一个抽象的概念,非实体的定义。其表示一个可使用于区别于其他资源标识符。例如字符串,数字类型等。在java中国,Uri既可以是相对的,也可以是绝对的,只要他符合Uri的格式定义。
- Url,uniform resource location 既统一资源定位符,是Uri的一种实现。其不仅可唯一标志一个资源,而且还可以locate到这个资源。
- Urn,uniform resource name 既统一资源命名
我们在定义个标识一个资源的变量名称时,到底应该使用Uri还是Url主要取决于这个value是否能够真实的定位到资源。Uri是更宽泛的概念,所以所有的资源名称都叫做Uri肯定是没错的。当把一个变量定义为Url时,就需要知道这个Url是真实可确切的定位到某个资源,既是绝对路径,而非相对。
其中Uri类存在于android.net.Uri中,Url存在于java.net.URI中,所以也有说法,Uri是在Url基础上扩展的,以适用于Android项目中。
Uri基本结构
标准的Uri与进一步的形式基本结构如下:
[scheme:]scheme-specific-part[#fragment]
[scheme:][//authority][path][?query][#fragment]
[scheme:][//host:port][path][?query][#fragment]
其中最后一种结构在android中较为常见,举个例子
http://www.java2s.com:8080/yourpath/fileName.htm?stove=10&path=32&id=4#harvic
":"之前的“http”为scheme,www.java2s.com:8080为host:port
/yourpath/fileName.htm为path, stove=10&path=32&id=4位query;#后为fragment
Uri数据的提取
getScheme() :获取Uri中的scheme字符串部分,在这里即,http
getSchemeSpecificPart():获取Uri中的scheme-specific-part:部分,这里是://www.java2s.com:8080/yourpath/fileName.htm?
getFragment():获取Uri中的Fragment部分,即harvic
getAuthority():获取Uri中Authority部分,即www.java2s.com:8080
getPath():获取Uri中path部分,即/yourpath/fileName.htm
getQuery():获取Uri中的query部分,即stove=10&path=32&id=4
getHost():获取Authority中的Host字符串,即www.java2s.com
getPost():获取Authority中的Port字符串,即8080
另外还有两个常用的:getPathSegments(),getQueryParameter(String key)