URI介绍_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > URI介绍

URI介绍

 2012/4/5 13:24:02  nanapoleon  程序员俱乐部  我要评论(0)
  • 摘要:这期继续网络方面的话题。学习android,肯定都会知道统一资源标示符URI。其实我对这个中文字面十分不敏感,因为无法形成一个具体抽象的事物,所以,常常URIURL傻傻分不清楚。因为URL的中文是统一资源指示符,啊不对,统一资源...那个,你自己baidu吧。其实,还是英语最好区分,URI=uniformresourceidentifier,最后一个词,id嘛(姑且这么理解,差不多,呵呵)。URL=uniformresourcelocator。URI是一个纯粹的句法结构
  • 标签:
这期继续网络方面的话题。
学习android,肯定都会知道统一资源标示符URI。其实我对这个中文字面十分不敏感,因为无法形成一个具体抽象的事物,所以,常常URI URL傻傻分不清楚。因为URL的中文是统一资源指示符,啊不对,统一资源...那个,你自己baidu吧。
其实,还是英语最好区分,URI = uniform resource identifier,最后一个词,id嘛(姑且这么理解,差不多,呵呵)。 URL = uniform resource locator。
URI是一个纯粹的句法结构,用于指定标识Web资源的字符串的各个不同部分。URL是URI的一个特例,它包含了用于定位Web资源的足够信息。所以,URL是URI的一个特例,比如这个mailto:cay@horstmann.com,不知道怎么叫吧,他叫URN(name)也是URI的一种。
在java和android中,URI对外的接口是不太一样的,在android中URI的意义非常重大,他是所有资源的标示符(ID),通过URI可找到一个一一对应的具体实体,如文件(file),数据库的表项(content)等,可以说贯穿这个Framework
这么重要,我们就先来看看URI一般的格式:

[scheme:]schemeSpecificPart[#fragment]  ([...]表示可选)

首先,我查看了下java.net下的URI,它有两个方法isAbsolute()和isOpaque()。
好,先看第一个方法,是否绝对的?
URI分为两大类,绝对URI相对URI
分类方法为:有scheme:开头的就是绝对URI,否则就是绝对URI。(如 file:///sdcard/xxx和../../java/net/Socket.html#Socket())
第二个方法,是否透明?
定义,绝对URI中,schemeSpecificPart不是以/开头,这个URI就是不透明的,如:mailto:cay@horstmann.com
(可以从上面得出树状结构  URI:绝对和相对  绝对:透明和不透明
还有个比较重要的概念,绝对的透明的URI和相对的URI都是分层的(hierarchical)
去看看android的URI api吧,所有is判断都会有。
有了上述概念,看看android中URI的具体类有:OpaqueUri,HierarchicalUri和StringUri。怎么样,能看懂了吧。
我们继续,如果一个URI是分层的,那么这个URI的schemeSpecificPart(一般简称ssp)是如下结构:

[authority][path][?query] ([...]表示可选)

而对于那些基于服务器的URI来说,authority结构为:

[userinfo@]host[:port]

以上部分是必须记住的,否则你就无法理解一个URI的这正意义。
然后,使用中,URI类的作用之一就是解析标示符并将它们分解成各个组成部分。记住并了解下面的方法吧:
getScheme() getSchemeSpecificPart() getAuthority() getUserInfo() getHost() getPort() getPath() getQuery() getFragment() (其实是有顺序的,你能看出来吗)
好了,所有URI的概念就介绍完了,但对于URI类,另一个作用就是处理绝对URI和相对URI。
如果存在如下的绝对URI:
http://docs.mycompany.com/api/java/net/ServerSocket.html
和一个如下相对URI:
../../java/net/Socket.html#Socket()
那么可以将它们合并成一个绝对URI:
http://docs.mycompany.com/api/java/net/Socket.html#Socket()
这个过程被称为相对URL的转换(resolving)。
与此相反的过程称之为相对化(relativization)。
如,有一个基本URI:
http://docs.mycompany.com/api
和另一个URI:
http://docs.mycompany.com/api/java/lang/String.html
那么相对化之后的URI就是:
http://docs.mycompany.com/api  (没错,是一个相对URI)
对应api就是:
relative = base.relativize(combined);
combined = base.resolve(relative);
好了,看完此文,你会发现URI的所有接口你都能看懂了!
Cheers~

  • 相关文章
发表评论
用户名: 匿名