定义
URL: Unifrom Resource Locator 统一资源定位符
URI: Unifrom Resource Identifier 统一资源标识符
URN: Universal Resource Name 统一资源名称
关系
这里首先说明下,URL和URN是URI的一个子集,目前URN还处于试验阶段,这里主要讲解URL和URI.
URI是统一资源标识符,而URL是统一资源定位符。因此可以说每个URL都是URI,但不一定每个URI都是URL.这是因为URI还包括一个子类(URN).
URI是个纯粹的句法结构,用于指定标识Web资源的字符串的各个不同部分。URL是URI的一个特例,它包含了定位Web资源的足够信息。其他URI,比如
mailto:cay@horstman.com
则不属于定位符,因为根据该标识符无法定位任何资源
用法
URI
URI只是唯一资源标识符,并不包含任何访问资源的方法,它的作用就是解析资源。
URI构成:[scheme:][//authority][path][?query][#fragment]
URI uriBase = new URI("http://www.somedomain.com/user/info?id=10#ui");
System.out.println(uriBase.getAuthority());//www.somedomain.com
System.out.println(uriBase.getScheme());//http
System.out.println(uriBase.getPath());// /user/info
System.out.println(uriBase.getPort());// -1
System.out.println(uriBase.getFragment());// ui
System.out.println(uriBase.getQuery());//id=10
其实在java中主要就是解析得到资源的scheme query path等字段,当然还有一个最重要的方法toURL
得到统一资源定位符
URL
URL是统一资源定位符,URL可以资源,打开一个到达资源的流
Demo:打开百度首页的资源
URI uri = new URI("https://www.baidu.com/");
URL url = uri.toURL();
InputStream in = url.openStream();
ByteArrayOutputStream out = new ByteArrayOutputStream();
byte[] b = new byte[1024];
int len = -1;
while ((len = in.read(b)) != -1) {
out.write(b, 0, len);
}
System.out.println(new String(out.toByteArray()));