URI类

URI是对URL的抽象,不仅包括统一资源定位符(Uniform Resource Locator,URL)还包括统一资源名(Uniform Resource Names,URN)。实际使用的URI大多是URL,正常情况下,假如你想下载一个URL的内容,应当使用URL类,如果想使用URL来完成标识而不是获取,就应当使用URI类;

构造一个URI

public URI(String str) throws URISyntaxException
public URI(String scheme, String ssp, String fragment)throws URISyntaxException
public URI(String scheme, String host, String path, String fragment)throws URISyntaxException
public URI(String scheme,String authority,String path, String query, String fragment)throws URISyntaxException
public URI(String scheme,String userInfo, String host, int port,String path, String query, String fragment)throws URISyntaxException

第一个构造函数根据任何满足条件的字符串创建一个新的URI对象:

URI uri = new URI("http://www.baidu.com");   //如果不遵循URI语法,会抛出URISyntaxException异常

第二个构造函数需要一个模式特定部分。模式(scheme)是URI的协议,如http、urn、tel等;第三个参数包含一个片段标识符(Fragment Identifiers,如果有的话)。为这个参数传入null时,会忽略片段标识符:

URI uri = new URI("http","//www.baidu.com",null);

第三个构造函数用于层次URI:

URI uri = new URI("http","www.baidu.com","/index.html","today");

这会生成URI:http://www.baidu.com/index.html#today
第四个构造函数与前一个基本相同,只是添加了一个查询字符串部分:

URI uri = new URI("http","www.baidu.com","/index.html","name=yd&sex=man","today");

第五个构造函数是前面两个构造函数调用的主层次URI构造函数。这个方法将授权机构分解为用户信息、主机和端口部分:

URI uri = new URI("http", "admin", "www.baidu.com", 80, "/index.htm", "name=yd&sex=man", "#");

URI的各个部分

URI引用包括最多三个部分:模式、模式特定部分和片段标识符:

  • 模式:模式特定部分:片段

public String getScheme()
public String getSchemeSpecificPart()        //解码相应的组成部分中的任何转义八位组
public String getRawSchemeSpecificPart()     //以原始形式返回它们的相应组成部分的值,不解释任何转义八位组。
public String getFragment()
getRawFragment()

public boolean isAbsolute()

在许多有用的URI中,模式特定部分都有一个特定的分层格式,划分为授权机构、路径和查询字符串。授权机构进一步划分为用户信息、主机和端口。如果URI是一个层次URI时,isOpaque()返回false,如果不是分层的URI,isOpaque()则返回true:

public boolean isOpaque() {     //Opaque不透明return path == null;}


当特定URI不包含某个信息时,相应的方法会返回null。getPort()是个例外。由于它声明为返回一个int,所以它无法返回null。实际上,它会返回-1表示省略了端口;

解析相对URI

URI类提供了3个方法可以在相对和绝对URI之间来回转换:

public URI resolve(URI uri)
public URI resolve(String str)
public URI relativize(URI uri)
URI uri = new URI("http://www.baidu.com");
URI uri2 = new URI("/index.html");
URI uri3 = uri.resolve(uri2);
System.out.println(uri3);   //输出http://www.baidu.com/index.html

如果调用URI本身不包含绝对URI,那么resolve()方法将尽可能地解析URI,并返回一个新的相对URI对象作为结果:

URI top = new URI("books/java/");
URI resolved = top.resolve("URI/07/index.html");
System.out.println(resolved);    //输出books/java/URI/07/index.html

还可以反向完成以上过程,即从绝对URI变成相对URI。relativize()方法根据相对于调用URI的uri参数创建一个新的URI对象:

URI absolute = new URI("http://www.example.com/images/logo.png");
URI top = new URI("http://www.example.com/");
URI relative = top.relativize(absolute);
System.out.println(relative);    //输出images/logo.png

相等性和比较

字符串表示

有两个方法可以将URI对象转换为字符串:

  • public String toString()
  • public String toASCIIString()

toString()方法返回URI的未编码的字符串形式
toASCIIString()方法返回URI的编码的字符串形式

URLEncoder

要对字符串完成URL编码,需要将这个字符串和字符集名传入URLEncoder.encode()方法:

String encode = URLEncoder.encode("this is a test","UTF-8");          //空格转换为+号
System.out.println(encode);   //输出this+is+a+test

URLDecoder

对应的URLDecoder类有一个静态方法decode(),它会对用x-www-form-url-encoded格式编码的字符串进行解码:

public static String decode(String s, String enc)   //如果不确定使用哪种编码格式,那就选择UTF-8throws UnsupportedEncodingException

代理

以上只是学习所做的笔记!!!
书籍:Java网络编程

URL和URI(二)URI相关推荐

  1. URL、URN、URI

    目录 URL URN URI 总结 参考 URL URL:(全称:Uniform Resource Locator) 统一资源定位符. 举个栗子: 张三,他住在"广东省佛山市顺德区乐从镇新华 ...

  2. URL、URN、URI 三者之间区别和联系

    0 基本概念 URL(Uniform Resource Locator)统一资源定位符,表示的是资源位置,期望提欧共资源查找方法.如浏览器重使用的URL URI(Uniform Resource Id ...

  3. URL、URN和URI

    文章目录 URL(统一资源定位符) URN(统一资源名称) URI (统一资源标志符) URL.URN和URI的区别 域名和IP地址的区别 参考文献 URL(统一资源定位符) URL是对可以从互联网上 ...

  4. Android中的URI 和Uri

    一.URI与Uri 大家可能经常会看到在开发时,怎么有的时候是URI,有的时候是Uri,这是怎么回事? 名称如此相像的两个类是有什么区别和联系? 1.所属的包不同.URI位置在java.net.URI ...

  5. java uri getpath_Java URI getPath()用法及代码示例

    getPath()函数是URI类的一部分.函数getPath()返回指定URI的路径名称. 函数签名: public String getPath() 用法: url.getPath() 参数:此功能 ...

  6. html打开浏览器uri,Data URI和MHTML完整解决所有浏览器

    Data URI Data URI 是由 RFC 2397 定义的一种把小文件直接嵌入文档的方案.通过如下语法就可以把小文件变成指定编码直接嵌入到页面中: data:[][;base64], MIME ...

  7. 根据url动态生成二维码

    根据url动态生成二维码的工具类,没有细研究,先贴出来,有兴趣自己深究.public class QRCodeUtil {public static BufferedImage createImage ...

  8. 根据url地址生成二维码,微信扫描二维码可直接打开网址

    需求:根据url地址生成二维码,微信扫描二维码可直接打开网址 html代码: <input id="text" type="text" value=&qu ...

  9. 解析网络URL地址的二维码

    java解析url二维码 解析网络URL地址的二维码 解析网络URL地址的二维码 @Testvoid contextLoads() throws Exception {StringBuffer sb ...

  10. 【各种**问题系列】什么是URL、URN、URI?

    一.URI概述: URI(统一资源标识符)是标识逻辑或物理资源的字符序列,与URL类似,也是一串字符.通过使用位置,名称或两者来标识Internet上的资源:它允许统一识别资源. 有两种类型的URI, ...

最新文章

  1. 对偶问题(dual problem)
  2. 测试算法(性能)的工具类
  3. python中文读音ndarray-Python中Numpy ndarray的使用详解
  4. python项目部署失败的原因_python项目环境部署(一)
  5. select2 api参数的文档
  6. 加州大学惊现神操作!物理教授用数学论文摆脱400美元交通罚单,却惨被网友大反转.........
  7. 拓展欧几里得小结(初级理解)
  8. leetcode 724. 寻找数组的中心索引
  9. Win32程序执行单元-多线程
  10. fscanf返回值被忽略怎么解决_pytest的fixture怎么用?
  11. SpringBoot 配置 文件 mybatis type-aliases-package
  12. lineNumber: 8; columnNumber: 128; cvc-elt.1: 找不到元素 'beans' 的声明
  13. 第二章节 变量与数据类型
  14. Linux 之旅 8:初识 BASH
  15. Macbook双系统 10.11及Ubuntu
  16. 好的家庭教育是什么样的?有智慧的家长都这样做
  17. Android Retrofit 2.0(三)从源码分析原理
  18. Linux Mint 18.2 安装与调整
  19. python3程序开发指南_Python 3安装和设置指南
  20. ARP病毒专杀工具免费下载

热门文章

  1. 计算机软件资料统计表,幼儿园评估资料参考目录(中心幼儿园)
  2. 蚂蚁森林「偷能量」和「反洗钱」,用的竟是同一种技术!
  3. 【Steam】各种Steam致命错误-Steam需要在线进行更新什么意思。请确保你的网络连接正常,请重试。
  4. Java---设计【员工工资管理系统】
  5. Office2010安装需要MSXML版本6.10.1129.0的方法
  6. VC++模拟鼠标点击
  7. atmega168p与328p_atmega328P 写入 Boot Loader的那点事
  8. 车辆跟踪设备中晶振分类简介
  9. 禁忌搜索算法(Tabu Search)
  10. 电脑控制手机 易语言也可以实现颜色比较功能哦