java.net.URI 简介 文档 API
URI 简介
public final class java.net.URI extends Object implements Comparable<URI>, Serializable
URI 语法和组成部分
[ scheme : ] scheme-specific-part[ # fragment]
其中,方括号 [...] 用于描述可选组成部分,字符 : 和 # 代表它们自身。
mailto:java-net@java.sun.com
news:comp.lang.java
urn:isbn:096139210x
分层 URI 或者为绝对 URI(其特定于scheme的部分以斜线字符 '/' 开始),或者为相对 URI,即不指定scheme的 URI。下面是分层 URI 的一些示例:
http://java.sun.com/j2se/1.3/
docs/guide/collections/designfaq.html#28
../../../demo/jfc/SwingSet2/src/SwingSet2.java
file:///~/calendar
分层 URI 还要按照下面的语法进行进一步的解析
[ scheme :][ // authority][ path][ ? query][ # fragment]
其中, :、 /、 ? 和 # 代表它们自身。
[ user-info @] host[ : port]
其中,字符 @ 和 : 代表它们自身。
- 方案Scheme String
- 特定于方案的部分SchemeSpecificPart String
- 授权Authority String
- 用户信息UserInfo String
- 主机Host String
- 端口Port int
- 路径Path String
- 查询Query String
- 片段Fragment String
针对 URI 实例的运算
http://java.sun.com/j2se/1.3/docs/guide/collections/designfaq.html#28
http://java.sun.com/j2se/1.3/demo/jfc/SwingSet2/src/SwingSet2.java
u .relativize( u .resolve( v )).equals( v )
和
u .resolve( u .relativize( v )).equals( v )。
此运算在下面的场合非常有用:构造一个包含 URI 的文档,该 URI 必须尽可能是根据文档的基本 URI 建立的相对 URI。
字符分类
- alpha(初始的) US-ASCII 字母字符,'A' 到 'Z' 以及 'a' 到 'z'
- digit US-ASCII 十进制数字符,'0' 到 '9'
- alphanum 所有 alpha 和 digit 字符
- unreserved(不保留的) 所有 alphanum 字符及字符串 "_-!.~'()*" 中包含的字符
- punct 字符串 ",;:$&+=" 中包含的字符
- reserved(保留的) 所有 punct 字符及字符串 "?/[]@" 中包含的字符
- escaped(转义的) 转义八位组,即三部分组合:百分号 ('%') 后跟两个十六进制数('0'-'9'、'A'-'F' 和 'a'-'f')
- other 未包含在 US-ASCII 字符集中的 Unicode 字符不是控制字符(根据 Character.isISOControl 方法),并且不是空格字符(根据 Character.isSpaceChar 方法)(与 RFC 2396 有些出入,RFC 2396 限制为 US-ASCII)
转义八位组、引用、编码和解码
- 当要求 URI 不能包含任何 other 字符以严格遵守 RFC 2396 时,需要对非 US-ASCII 字符进行编码。
- 要引用 组成部分中的非法字符。用户信息、路径、查询和fragment组成部分在判断哪些字符合法哪些字符非法上稍有不同。
- 字符的编码 方式是,用代表该字符在 UTF-8 字符集中的字符的转义八位组序列取代该字符。例如,欧元符号 ('\u20AC') 编码后为 "%E2%82%AC"。(与 RFC 2396 有些出入,RFC 2396 未指定任何特殊字符集)。
- 非法字符通过简单地对它进行编码来引用。例如,空格字符,用 "%20" 取代它来进行引用。UTF-8 包含 US-ASCII,因此对于 US-ASCII 字符,此转换具有的效果与 RFC 2396 的要求相同。
- 对转义八位组序列进行解码 的方法是,用它所代表的 UTF-8 字符集中的字符的序列将它取代。UTF-8 包含 US-ASCII,因此解码具有对引用的任何 US-ASCII 字符取消引用的效果,以及对任何编码的非 US-ASCII 字符进行解码的效果。如果在对转义八位组进行解码时出现解码错误,则出错的八位组用 Unicode 替换字符 '\uFFFD' 取代。
- 单参数构造方法要求对参数中的任何非法字符都必须引用,并保留出现的任何转义八位组和 other 字符。
- 多参数构造方法根据其中出现的组成部分的需要对非法字符进行引用。百分号字符 ('%') 始终通过这些构造方法引用。任何 other 字符都将被保留。
- getRawUserInfo、getRawPath、getRawQuery、getRawFragment、getRawAuthority 和 getRawSchemeSpecificPart 方法以原始形式返回它们的相应组成部分的值,不解释任何转义八位组。由这些方法返回的字符串有可能包含转义八位组和 other 字符,但不包含任何非法字符。
- getUserInfo、getPath、getQuery、getFragment、getAuthority 和 getSchemeSpecificPart 方法解码相应的组成部分中的任何转义八位组。由这些方法返回的字符串有可能包含 other 字符和非法字符,但不包含任何转义八位组。
- toString 返回带所有必要引用的 URI 字符串,但它可能包含 other 字符。
- toASCIIString 方法返回不包含任何 other 字符的、完全引用的和经过编码的 URI 字符串。
标识
new URI( u .toString()) .equals( u ) .
对于不包含冗余语法的任何 URI u,比如在一个空授权前面有两根斜线(如 file:///tmp/)和主机名后面跟一个冒号但没有端口(如 http://java.sun.com:),以及除必须引用的字符之外不对字符编码的情况,下面的标识也有效(3个参数):
new URI( u .getScheme() , u .getSchemeSpecificPart() , u .getFragment()) .equals( u )
在所有情况下,以下标识有效(6个参数,草泥马的,根本没有6个参数的构造方法!):
new URI( u .getScheme() , u .getUserInfo() , u .getAuthority() , u .getPath() , u .getQuery() , u .getFragment()) .equals( u )
如果 u 为分层的,则以下标识有效(7个参数):
new URI( u .getScheme() , u .getUserInfo() , u .getHost() , u .getPort() , u .getPath() , u .getQuery() , u .getFragment()) .equals( u )
如果 u 为分层的并且没有授权或没有基于服务器的授权。
URI、URL 和 URN
API
- 1个参数,URI(String str) 通过解析给定的字符串构造一个 URI。
- 3个参数,URI(String scheme, String ssp, String fragment) 根据给定的组成部分构造 URI。
- 4个参数,URI(String scheme, String host, String path, String fragment) 根据给定的组成部分构造分层 URI。
- 5个参数,URI(String scheme, String authority, String path, String query, String fragment) 根据给定的组成部分构造分层 URI。
- 7个参数,URI(String scheme, String userInfo, String host, int port, String path, String query, String fragment) 根据给定的组成部分构造一个分层 URI。
- 此便捷工厂方法的工作方式类似于调用 URI(String) 构造方法;由该构造方法抛出的任何 URISyntaxException 都被捕获,并包装到一个新的 IllegalArgumentException 对象中,然后抛出此对象。
- 此方法的使用场合是:已知给定的字符串是合法的 URI(例如,程序中声明的 URI 常量),该字符串无法这样解析时将被视为编程错误。
- 当 URI 从用户输入或从其他易于引起错误的源构造时,应该使用直接抛出 URISyntaxException 的构造方法。
- String getScheme() 返回此 URI 的方案【Scheme】部分。
- URI 的方案组成部分(如果定义了)只包含 alphanum 类别和字符串 "-.+" 中的字符。
- 方案始终以 alpha 字符开始。
- int getPort() 返回此 URI 的【端口号】。
- URI 的端口组成部分(如果定义了)是一个非负整数。
- 如果端口未定义,则返回 -1
- String getHost() 返回此 URI 的【主机】组成部分。
- String getRawPath() 返回此 URI 的原始/已解码的【路径】组成部分。
- 如果路径未定义,则返回 null
- String getRawAuthority() 返回此 URI 的原始/已解码的授权组成部分。
- URI 的授权组成部分(如果定义了)只包含“商用 at”字符 ('@') 和 unreserved、punct、escaped 和 other 类别中的字符。
- 如果授权是基于服务器的,则它被进一步约束为具有有效的用户信息、主机和端口组成部分。
- String getRawFragment() 返回此 URI 的原始/已解码的片段组成部分。
- String getRawQuery() 返回此 URI 的原始/已解码的查询组成部分。
- String getRawSchemeSpecificPart() 返回此 URI 原始的特定于方案的解码部分(从不为 null)。
- 特定于方案的部分永远不会是未定义的,但它可能为空("")。
- URI 的特定于方案的部分只包含合法的 URI 字符。
- String getRawUserInfo() 返回此 URI 的原始/已解码的用户信息组成部分。
- URI 的用户信息组成部分(如果定义了)只包含 unreserved、punct、escaped 和 other 类别中的字符。
- boolean isAbsolute() 判断此 URI 是否为绝对的。
- 当且仅当 URI 具有方案组成部分时,它才是绝对的。
- boolean isOpaque() 判断此 URI 是否为不透明的。
- 当且仅当 URI 是绝对的且其特定于方案的部分不是以斜线字符 ('/') 开始时,此 URI 才是不透明的。
- 不透明的 URI 具有一个方案、一个特定于方案的部分,以及可能会有的一个片段;所有其他组成部分都是未定义的。
- String toASCIIString() 以 US-ASCII 字符串形式返回此 URI 的内容。
- 如果此 URI 未包含 other 类别的任何字符,则调用此方法将返回的值与调用 toString 方法返回的值相同。否则,此方法的工作方式类似于调用该方法,然后对结果进行编码。
- URL toURL() 根据此 URI 构造一个 URL。
- 首先检查得知此 URI 为绝对路径后,此便捷方法的工作方式就好像调用它与对表达式 new URL(this.toString()) 进行计算是等效的。
- 如果此 URL 不是绝对的,抛出 IllegalArgumentException;如果无法找到 URL 的协议处理程序,或者如果在构造 URL 时发生其他错误,抛出MalformedURLException 。
- URI normalize() 规范化此 URI 的路径。
- URI relativize(URI uri) 根据此 URI 将给定 URI 相对化。
- URI parseServerAuthority() 尝试将此 URI 的授权组成部分(如果已定义)解析为用户信息、主机和端口组成部分。
- URI resolve(URI uri) 根据此 URI 解析给定的 URI。
- URI resolve(String str) 解析给定的字符串,然后在此 URI 的基础上构造一个新的 URI。 此方法与进行 resolve(URI.create(str)) 的作用相同。
java.net.URI 简介 文档 API的更多相关文章
- Java解析word,获取文档中图片位置
前言(背景介绍): Apache POI是Apache基金会下一个开源的项目,用来处理office系列的文档,能够创建和解析word.excel.ppt格式的文档. 其中对word文档的处理有两个技术 ...
- 利用Java动态生成 PDF 文档
利用Java动态生成 PDF 文档,则需要开源的API.首先我们先想象需求,在企业应用中,客户会提出一些复杂的需求,比如会针对具体的业务,构建比较典型的具备文档性质的内容,一般会导出PDF进行存档.那 ...
- 《Java开发学习大纲文档》V7.0
<Java开发学习大纲文档>V7.0简介: 本文档是根据企业开发所需要掌握的知识点大纲进行总结汇编,是Java开发工程师必备知识体系,系统化学习针对性非常强,逻辑分析能力非常清晰;技术方面 ...
- 《Java开发学习大纲文档》V6.0(已经不公布了,请查看第七版)
<Java开发大纲学习文档第六版>简介: 有需要的私聊作者QQ:253173641.
- jQuery全屏滚动插件fullPage.js中文帮助文档API
jQuery全屏滚动插件fullPage.js中文帮助文档API 发现了一个fullPage.js插件,于是百度了一下,还就是这个插件的作用,其实有很多网站都做了全屏滚动的特效,效果也很好看,今天 ...
- 百度地图和高德地图坐标系的互相转换 四种Sandcastle方法生成c#.net帮助类帮助文档 文档API生成神器SandCastle使用心得 ASP.NET Core
百度地图和高德地图坐标系的互相转换 GPS.谷歌.百度.高德坐标相互转换 一.在进行地图开发过程中,我们一般能接触到以下三种类型的地图坐标系: 1.WGS-84原始坐标系,一般用国际GPS纪录仪记 ...
- 001-Java®语言规范、Java平台标准版文档、JVM概述
一.概述 相关api地址:JDK10 JDK 9 JDK 8 JDK 7 JDK 6 Java语言和虚拟机规范: https://docs.oracle.com/javase/spec ...
- GrapeCity Documents (服务端文档API组件) V3.0 正式发布
近日,葡萄城GrapeCity Documents(服务端文档API组件)V3.0 正式发布! 该版本针对 Excel 文档.PDF 文档和 Word 文档的 API 全面更新,加入了用于生成 Exc ...
- GrapeCity Documents for Excel 文档API组件 V2.2 新特性介绍
GrapeCity Documents for Excel 文档API组件 V2.2 正式发布,本次新版本包含诸多重量级产品功能,如:将带有形状的电子表格导出为 PDF.控制分页和电子表格内容.将Ex ...
随机推荐
- @Resource与@Autowired注解的区别(转)
Spring不但支持自己定义的@Autowired注解,还支持由JSR-250规范定义的几个注解.如:@Resource.@PostConstruct及@PreDestroy 1.@Autowired ...
- Eclipse插件安装出现Duplicate location错误
一.原因 1.曾今安装过此插件 2.曾今安装此插件的时候出现错误 二.解决方法[eclipse] - Help - Install new software - Available Software ...
- 【SQL】178. Rank Scores
Write a SQL query to rank scores. If there is a tie between two scores, both should have the same ra ...
- DMA
DMA:如果将一串字符串通过串口传送到外设中去,用传统的方法,则CPU将不断的去扫描UTSTAT这个寄存器,在字符发送期间,CPU将不能做任何其他事情.为了解决这个问题,则在诞生了DMA CPU只需要 ...
- ubuntu18.04 安装Navicat 解决字体方框问题
前景 最近带着看一点数据库的知识,装一下navicat,就是这个玩意儿,在我编码毫无问题的情况下,这个软件上却显示各种乱码 环境 ubuntu 18.04 navicat 12(最新版) mysql ...
- MyBatis之MyBatis环境搭建
MyBatis之MyBatis环境搭建 一.MyBatis开发环境搭建 1.引入Jar包 ①MyBatis mybatis-3.4.1.jar ant-1.9.6.jar ant-launcher-1 ...
- BZOJ 3483 SGU505 Prefixes and suffixes(字典树+可持久化线段树)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3483 [题目大意] 给出一些串,同时给出m对前缀后缀,询问有多少串满足给出的前缀后缀模 ...
- HTML表单提交总结
概述:随着HTML5的兴起,前端越来越多样化,比如表单的提交,现在就有多种方式可以选择,下面总结一下常见的表单提交方式. 1.最基本的表单提交. <!DOCTYPE html> <h ...
- hdoj 5113 Black And White DFS+剪枝
Black And White Time Limit: 2000/2000 MS (Java/Others) Memory Limit: 512000/512000 K (Java/Others) T ...
- Codeforces Round #279 (Div. 2) A. Team Olympiad 水题
#include<stdio.h> #include<iostream> #include<memory.h> #include<math.h> usi ...