URL 和 URI 学习

定义

URL: Unifrom Resource Locator 统一资源定位符

URI: Unifrom Resource Identifier 统一资源标识符

URN: Universal Resource Name 统一资源名称

关系

URL 和 URI 学习_第1张图片

这里首先说明下,URL和URN是URI的一个子集,目前URN还处于试验阶段,这里主要讲解URL和URI.
URI是统一资源标识符,而URL是统一资源定位符。因此可以说每个URL都是URI,但不一定每个URI都是URL.这是因为URI还包括一个子类(URN).

URI是个纯粹的句法结构,用于指定标识Web资源的字符串的各个不同部分。URL是URI的一个特例,它包含了定位Web资源的足够信息。其他URI,比如

    mailto:[email protected]

则不属于定位符,因为根据该标识符无法定位任何资源

用法

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()));

你可能感兴趣的:(URL 和 URI 学习)