Atitit uri url格式规范与解析器 .URIparser 理解URI和URL的区别,我们引入URN这个概念。 URI = Universal Resource Identifier 统一资
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 统一资相关推荐
- 用C语言实现SGF格式围棋棋谱解析器
这是本人(liigo)独立实现的SGF格式围棋棋谱文件解析器,本文介绍其实现细节.网络上肯定可以找到完善的开源的SGF解析器,这是毋庸置疑的,我不直接使用它们,也不参考它们的实现代码,而是自己独立编码 ...
- 理解CSV格式规范(解析CSV必备)
什么是CSV CSV的格式规范 关于CSV文件解析 参考于CSV in Wikipedia 参考于RFC 4180 参考于CSV Reader 什么是CSV 逗号分隔值(Comma-Separated ...
- 理解CSV格式规范(解析CSV必备)(转载)
版权声明:据说这里是用来声明原创版权的,我只想说....欢迎转载但请注明出处:http://blog.csdn.net/woaixiaoyu520 https://blog.csdn.net/woai ...
- csv格式文件解析失败_理解CSV格式规范(解析CSV必备)
什么是CSV 逗号分隔值(Comma-Separated Values,CSV),其文件以纯文本形式存储表格数据(数字和文本),文件的每一行都是一个数据记录.每个记录由一个或多个字段组成,用逗号分隔. ...
- python 参数解析器_Python参数解析器,在h之前引发异常
我不知道为什么会这样.我的理解是用户至少有机会在执行默认操作之前使用-h.import os, sys, argparse class argument_parser(): # call on all ...
- 如何将base64图片转化为URL格式
1)将base64图片格式转为可读的url格式 将图片文件转为二进制,然后通过URL的createObjectURL函数,将二进制转为url格式 function getBase64URL(pic) ...
- 通往Groovy 3.0的漫漫长路,以及他们新改进的解析器
Apache Foundation已发布了Groovy的3.0版,其中包括以下新功能:新的解析器,程序包名称空间更改,增强的Elvis运算符以及对Java语法的支持,例如do / while循环,数组 ...
- Django框架深入了解_04(DRF之url控制、解析器、响应器、版本控制、分页)(二)
解析器介绍: 所谓解析器,就是前端传过来的数据,后端可以解析,从request.data中取出来,默认的解析器配置是三种编码格式都可以取 回到顶部 解析器的作用: 根据请求头(content-type ...
- CedarX中代码技术的应用借鉴 (二)多态的方式创建格式解析器
前言 CedarX是全志科技开源的多媒体SDK,其解码的调用基于自研的解码器接口,向上可对接MediaPlayer接口.本文记录与分析其源代码中对于C语言方面的代码技术的应用,仅作记录与借鉴. 源码参 ...
- Django框架深入了解_04(DRF之url控制、解析器、响应器、版本控制、分页)(一)
阅读目录 一.url控制 基本路由写法:最常用 第二种写法:继承ModelViewSet 第三种写法:(自动生成路由,必须继承ModelViewSet) 二.解析器 前端不同的数据格式请求,后端解析得 ...
最新文章
- hql删除mysql语句_mysql-使用Hibernate @SQLDelete对所有实体进行软删除
- 【数理知识】差分 差分方程
- supervisor
- python——文件操作File
- npz文件转为npy_Numpy_快速操作数组 4.4 数组的文件输入输出
- vi编辑器的学习使用(二十)
- java io flush_《文件传输基础——Java IO流》,对其中flush方法的思考
- 视频、画面、语言、文字与脑海、心灵
- 1年内从2000涨到13000的成长经验分享
- linux搭建stm32开发环境
- iis发布网站时出现根目录文件解决方案
- 失意时,要耐得住寂寞
- flash air java_Flash Air 打包安卓 ane
- php留言板的简单编写
- 一个人知道自己为什么而活,就可以忍受任何一种生活
- Python数据类型——数值型详解
- 有关计算机软件的心得1500,plc心得体会1500字
- php tcpdf修改pdf内容,php-使用TCPDF将空间写入PDF文件
- java中instanceof的用法
- Unity周围环境与光效调节[一]天空盒与天空盒反射的调节
热门文章
- 360 android 应用市场,360应用市场
- public class c中_C++中如何使用类模板
- 软件需求规格说明书_4.软件需求最佳实践笔记 | 软件需求与需求工程
- python输出文本和值_Python有没有函数打印当前对象的所有属性和值?_others_酷徒编程知识库...
- umount device is busy
- 从零开始发布web项目(七)
- SQL Server触发器更新原理
- MySQL-快速入门(12)备份、还原
- C语言-字符数组和字符串
- 【BZOJ-1090】字符串折叠 区间DP + Hash