Atitit uri url格式规范与解析器 .URIparser

理解URI和URL的区别,我们引入URN这个概念。

URI = Universal Resource Identifier 统一资源标志符
URL = Universal Resource Locator 统一资源定位符
URN = Universal Resource Name 统一资源名称

三者的关系如下图:
<img src="https://pic2.zhimg.com/f66f9f573436858aeeb2ac3da732f5a9_b.png" data-rawwidth="180" data-rawheight="108" class="content_image" width="180">也就是说,URI分为三种,URL or URN or (URL and URI)也就是说,URI分为三种,URL or URN or (URL and URI)
URL代表资源的路径地址,而URI代表资源的名称。
通过URL找到资源是对网络位置进行标识,如:

  • http://example.org/absolute/URI/with/absolute/path/to/resource.txt
  • ftp://example.org/resource.txt

通过URI找到资源是通过对名称进行标识,这个名称在某命名空间中,并不代表网络地址,如:

  • urn:issn:1535-3613

那我们无所不知的维基百科把这段消化的很好,并描述的更加形象了:

“URI可以分为URL,URN或同时具备locators 和names特性的一个东西。URN作用就好像一个人的名字,URL就像一个人的地址。换句话说:URN确定了东西的身份,URL提供了找到它的方式。”

通过这些描述我们可以得到一些结论:

  • 首先,URL是URI的一种(通过那个图就看的出来吧)。所以有人跟你说URL不是URI,他就错了呗。但也不是所有的URI都是URL哦,就好像蝴蝶都会飞,但会飞的可不都是蝴蝶啊,你让苍蝇怎么想!
  • 让URI能成为URL的当然就是那个“访问机制”,“网络位置”。e.g. http:// or ftp://.。
  • URN是唯一标识的一部分,就是一个特殊的名字。

  下面就来看看例子吧,当来也是来自权威的RFC:

  • ftp://ftp.is.co.za/rfc/rfc1808.txt (also a URL because of the protocol)
  • http://www.ietf.org/rfc/rfc2396.txt (also a URL because of the protocol)
  • ldap://[2001:db8::7]/c=GB?objectClass?one (also a URL because of the protocol)
  • mailto:John.Doe@example.com (also a URL because of the protocol)
  • news:comp.infosystems.www.servers.unix (also a URL because of the protocol)
  • tel:+1-816-555-1212
  • telnet://192.0.2.16:80/ (also a URL because of the protocol)
  • urn:oasis:names:specification:docbook:dtd:xml:4.1.2

  这些全都是URI, 其中有些事URL. 哪些? 就是那些提供了访问机制的.

URI(IMS用户的身份标识)_百度百科.mhtml

一.URI简介

概念:统一资源标识符(Uniform Resource Identifier)

组成部分:

1.访问资源的命名机制(scheme)

2.存放资源的主机名(authority)

3.资源自身的名称,由路径表示(path)

格式:scheme:// authority//path,其中authority中又包括了host和port两部分。

content://com.example.project:200/folder/subfolder/etc

\---------/ \-------------------/ \----------------------------/

Scheme          host        port              path

\-------------------/

Authority

1

2

3

4

5

用处:uri主要用来表示一个资源。这个资源有很多种类,包括图片,视频,文件等。

针对资源的种类,uri用以下几种scheme标识:

1.Content:主要操作的是ContentProvider,所以它代表的是数据库中的某个资源

2.http:一个网站资源

3.file:本地机器上的某个资源

4.git:git仓库中某个资源

5.ftp:服务器上的某个资源

6.ed2k:(电驴协议)

---------------------

作者:谁的影子

来源:CSDN

二.Uri源码

位置:frameworks\base\core\java\android\net\Uri.java

android中对Uri分为两大类:Hierarchical和opaque

Hierarchical:以”//”分级的Uri,比如:http://google.com,content://com.example.project:200/

opaque:没有使用”//”分级的Uri,比如:mailto:nobody@google.com

根据这个分类设定,Uri这个抽象类的实现类和继承关系如下:

以上是Uri.java中比较常用的几个函数。至于其子类OpaqueUri,HierarchicalUri ,StringUri,实现上并不是太难,不做展开。这里需要特殊说明的是Uri的内部类Builder,这个Builder是一个辅助类,用于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]

面的方法吧: 
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)

/bookmarksHtmlEverythingIndexPrj/src/com/attilax/net/URIparser.java

默认的uri解析器存在bug,,如果密码里面存在金号则解析出错。。

"http://root:p 1@101.132.148.11:22";

所以需要自己写了。

void parse(boolean rsa) throws URISyntaxException {

方法后面添加

String[] aStrings=this.input.split("@");

int protoIndex=this.input.indexOf("//");

if(protoIndex<1)throw new RuntimeException("no protocal::");

userInfo=  aStrings[0].split("//")[1];

int syegeoStart=input.indexOf("//");

int hostEnd=input.indexOf(":", syegeoStart+1);

String hostportString=this.input.split("@")[1];

host=hostportString.split(":")[0];

port=Integer.parseInt(hostportString.split(":")[1]);

//input.substring(syegeoStart+2,hostEnd);

System.out.println("");

}

(9+条消息)Uri与UriMatcher - sjz4860402的专栏 - CSDN博客.mhtml

Atitit uri url格式规范与解析器 .URIparser 理解URI和URL的区别,我们引入URN这个概念。 URI = Universal Resource Identifier 统一资相关推荐

  1. 用C语言实现SGF格式围棋棋谱解析器

    这是本人(liigo)独立实现的SGF格式围棋棋谱文件解析器,本文介绍其实现细节.网络上肯定可以找到完善的开源的SGF解析器,这是毋庸置疑的,我不直接使用它们,也不参考它们的实现代码,而是自己独立编码 ...

  2. 理解CSV格式规范(解析CSV必备)

    什么是CSV CSV的格式规范 关于CSV文件解析 参考于CSV in Wikipedia 参考于RFC 4180 参考于CSV Reader 什么是CSV 逗号分隔值(Comma-Separated ...

  3. 理解CSV格式规范(解析CSV必备)(转载)

    版权声明:据说这里是用来声明原创版权的,我只想说....欢迎转载但请注明出处:http://blog.csdn.net/woaixiaoyu520 https://blog.csdn.net/woai ...

  4. csv格式文件解析失败_理解CSV格式规范(解析CSV必备)

    什么是CSV 逗号分隔值(Comma-Separated Values,CSV),其文件以纯文本形式存储表格数据(数字和文本),文件的每一行都是一个数据记录.每个记录由一个或多个字段组成,用逗号分隔. ...

  5. python 参数解析器_Python参数解析器,在h之前引发异常

    我不知道为什么会这样.我的理解是用户至少有机会在执行默认操作之前使用-h.import os, sys, argparse class argument_parser(): # call on all ...

  6. 如何将base64图片转化为URL格式

    1)将base64图片格式转为可读的url格式 将图片文件转为二进制,然后通过URL的createObjectURL函数,将二进制转为url格式 function getBase64URL(pic) ...

  7. 通往Groovy 3.0的漫漫长路,以及他们新改进的解析器

    Apache Foundation已发布了Groovy的3.0版,其中包括以下新功能:新的解析器,程序包名称空间更改,增强的Elvis运算符以及对Java语法的支持,例如do / while循环,数组 ...

  8. Django框架深入了解_04(DRF之url控制、解析器、响应器、版本控制、分页)(二)

    解析器介绍: 所谓解析器,就是前端传过来的数据,后端可以解析,从request.data中取出来,默认的解析器配置是三种编码格式都可以取 回到顶部 解析器的作用: 根据请求头(content-type ...

  9. CedarX中代码技术的应用借鉴 (二)多态的方式创建格式解析器

    前言 CedarX是全志科技开源的多媒体SDK,其解码的调用基于自研的解码器接口,向上可对接MediaPlayer接口.本文记录与分析其源代码中对于C语言方面的代码技术的应用,仅作记录与借鉴. 源码参 ...

  10. Django框架深入了解_04(DRF之url控制、解析器、响应器、版本控制、分页)(一)

    阅读目录 一.url控制 基本路由写法:最常用 第二种写法:继承ModelViewSet 第三种写法:(自动生成路由,必须继承ModelViewSet) 二.解析器 前端不同的数据格式请求,后端解析得 ...

最新文章

  1. hql删除mysql语句_mysql-使用Hibernate @SQLDelete对所有实体进行软删除
  2. 【数理知识】差分 差分方程
  3. supervisor
  4. python——文件操作File
  5. npz文件转为npy_Numpy_快速操作数组 4.4 数组的文件输入输出
  6. vi编辑器的学习使用(二十)
  7. java io flush_《文件传输基础——Java IO流》,对其中flush方法的思考
  8. 视频、画面、语言、文字与脑海、心灵
  9. 1年内从2000涨到13000的成长经验分享
  10. linux搭建stm32开发环境
  11. iis发布网站时出现根目录文件解决方案
  12. 失意时,要耐得住寂寞
  13. flash air java_Flash Air 打包安卓 ane
  14. php留言板的简单编写
  15. 一个人知道自己为什么而活,就可以忍受任何一种生活
  16. Python数据类型——数值型详解
  17. 有关计算机软件的心得1500,plc心得体会1500字
  18. php tcpdf修改pdf内容,php-使用TCPDF将空间写入PDF文件
  19. java中instanceof的用法
  20. Unity周围环境与光效调节[一]天空盒与天空盒反射的调节

热门文章

  1. 360 android 应用市场,360应用市场
  2. public class c中_C++中如何使用类模板
  3. 软件需求规格说明书_4.软件需求最佳实践笔记 | 软件需求与需求工程
  4. python输出文本和值_Python有没有函数打印当前对象的所有属性和值?_others_酷徒编程知识库...
  5. umount device is busy
  6. 从零开始发布web项目(七)
  7. SQL Server触发器更新原理
  8. MySQL-快速入门(12)备份、还原
  9. C语言-字符数组和字符串
  10. 【BZOJ-1090】字符串折叠 区间DP + Hash