Java 中 URI 和 URN 的区别
现代互联网的核心是万维网,它拥有数十亿个网站和资源。通过遵循协议,有多种方法可以访问这些基于 Web 的资源。Java 拥有网络的概念,用于建立客户端与这些资源之间的通信。但是,要在数百万个可用资源中找到特定资源,我们需要一个唯一的标识符。有三个组件:URI、URL 和 URN,它们可以帮助我们在网络上定位特定的资源。本文旨在解释 Java 中 URI 和 URN 的区别。
Java 中 URI 与 URN 的比较
URI
它是统一资源标识符的缩写。它包含一系列字符,用于标识网络上的资源。它定义了一个方案,例如 http、ftp、mailto 等,指定如何访问资源。URI 允许在同一上下文中使用各种资源标识符,而不管用于访问这些资源的方法之间的差异。Java 在 'java.net' 包中提供了 URI 类。
语法
URI nameOfObject = new URI( "URIspecifier" );
这里,URIspecifier 是实际的 URI,或者我们可以称之为资源的链接。
实例
https://example.com/resource?id=12345&category=books
在上面的 URI 示例中,我们有一个假设的域名 'example.com',后面跟着资源路径 '/resource'。它还包括两个查询参数,名为 'id',值为 '12345',以及 'category',值为 'books'。
URN
它是统一资源名称的首字母缩写。它定义了某个资源的名称。换句话说,URN 是一种特殊的 URI,它通过名称而不是位置来标识资源。它具有 urn 方案和命名空间标识符(例如 isbn 和 uuid),指定资源的命名权限。由于互联网上对象命名缺乏通用标准,这种识别资源的方法失败了。
实例
urn:example:resource:books:12345
在上面的 URN 示例中,我们使用了 'example' 命名空间,后面跟着资源标识符 'resource:books:12345'。URN 格式由分层结构组成,不同的组件用冒号分隔。
示例 1
在下面的示例中,我们将使用 'java.net' 包的一些内置方法和类来检查给定 URI 中使用的协议。
import java.net.*; public class URIExample { public static void main(String args[]) throws Exception { try { // link of file URI uri = new URI("https://tutorialspoint.com/java/pdf/java_networking.pdf"); // creating URL object from the URI URL url = uri.toURL(); // making connection with the file URLConnection urlConn = url.openConnection(); // retrieving the name of protocol String scheme = uri.getScheme(); System.out.println("The name of protocol is: " + scheme); } catch(Exception exp) { System.out.println("Something went wrong!! Please check the link!!"); } } }
输出
The name of protocol is: https
在上面的代码中,我们创建了一个 URI 类的实例,并将文件的链接传递给它的构造函数。然后,使用 URI 定义了一个 URL 类的实例,以便我们可以与给定的链接建立连接。使用 getScheme() 方法,我们检索了链接中使用的协议的名称。
URI 和 URN 之间的区别
下表显示了 URI 和 URN 之间的区别:
URI |
URN |
---|---|
它可以定位互联网上可用的资源。 |
它只能命名资源。 |
如果相应资源发生修改,URI 可以更新。 |
它是持久的,不依赖于资源的位置或名称。 |
它包含比 URN 更多的信息。 |
它包含比 URI 更少的信息。 |
URI 由 URN 和 URL 组成。 |
URN 是 URI 的子集。 |
结论
URI 是 URN 和 URL 的超集。它可以通过名称、位置或两者来识别资源。另一方面,URN 是 URI 的子集,并在给定命名空间内通过名称识别资源。