欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

URL 和 URI 的区别,带自己的理解

程序员文章站 2024-02-14 12:56:22
...

先看一下 jdk1.6 上 api 文档的说明

URI 说明

URI 表示一个统一资源标识符的引用,此类的实例不可变

组成部分:
[schema:]schema-specific-part[#fragment]

不透明 URI:
schema 部分不是以 / 部分开始 ,不透明 URI 无法进一步解析,例如:

mailto:java-[email protected].sun.com
news:com.lang.java
urn:isbn:096139210x

分层 URI:
schema 部分以 / 字符开始 ,或者不指定 schema ,例如:

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]

分层 URI 的 authority 部分,基于服务器的这样指定
[[email protected]]host[:port]
像使用 ssh 连接 linux 的,就是这样授权的,例如:

ssh [email protected] -P 22 

URL 说明

URL 表示一个统一资源定位符。资源可以是简单的文件或目录,也可以是对更为复杂的对象的引用,例如对数据库或搜索引擎的查询

个人理解

URL 是 URI 的子集,是一种分层 URI 。

常用方法说明

通常我们可以从 class.getResource("相对于类路径以 / 开头") 获取一个 URL ,它是一个文件协议的绝对资源

file:/E:/project/20171208/sanri-tools-maven/target/test-classes/

可以使用它的 相对化绝对化 来处理路径问题

URI.relativize(URI) 方法用于用基本路径相对化一个绝对路径,使目标 URI 相对于基本 URI
URI.resolve(URI) 方法用于根据基本路径和一个相对路径生成一个目标路径的绝对路径

以上两个方法可能看起来比较绕,举个例子:

URI base = new URI("http://www.baidu.com/static");
URI relative = new URI("image/uuid.png");
URI whole = new URI("http://www.baidu.com/static/file/mm.zip");

// resolve 方法例子
base.resolve(relative);		// http://www.baidu.com/static/image/uuid.png
base.relativize(whole)		// file/mm.zip