有一个很重要的类我知之甚少:java.net.URL。它可以在每一帧中看到。平时经常用到,只是自己不重视,了解不够。什么是URL,其格式是什么样的?参考维基百科:https://zh.wikipedia.org/wiki...本文主要记录和解释java.net.URL和几个相关类的注解。记录和解释的目的是为了方便大家自己参考。1.java.net.URL/***类URL表示一个统一资源定位器,一个指向万维网上“资源”的指针。*资源可以是简单的文件或目录,也可以是对更复杂对象的引用,例如对数据库或搜索引擎的查询。*有关URL类型及其格式的更多信息,请访问:[URL类型](http://web.archive.org/web/20051219043731/http://archive.ncsa.uiuc.edu/SDG/Software/Mosaic/Demo/url-primer.html)*通常,一个URL可以分成几个部分。考虑以下示例:*http://www.example.com/docs/resource1.html*上面的URL表明要使用的协议是http(超文本传输??协议),信息位于名为www的文件中.example.com主机。*这个主机上的信息被命名为/docs/resource1.html主机上这个名字的确切含义是protocoldependent和hostdependent。“信息”通常驻留在文件中,也可以即时生成。*URL可以选择性地指定一个“端口”,它是在远程主机上建立TCP连接的端口号。如果未指定端口,则使用协议的默认端口。例如,http的默认端口是80。备用端口可以指定为:http://www.example.com:1080/docs/resource1.html*...*/publicfinalclassURLimplementsjava.io.Serializable{transientURLStreamHandlerhandler;/***返回一个URLConnection实例,表示到URL引用的远程对象的连接。*每当URL协议对应的handler调用openConnection(URL)时,就会创建一个新的URLConnection*需要注意的是,URLConnection实例在创建时并不会建立真正的网络连接。*创建实际的网络连接发生在URLConnection.connect()调用中。*如果有一个公共的、专门的URLConnection子类属于以下包之一或其处理程序协议的子包之一:java.lang\java.io\java.util\java.net,返回的连接将是将是这个子类。例如:*对于HTTP协议,将返回一个HttpURLConnection,对于JAR协议,将返回一个JarURLConnection。*/publicURLConnectionopenConnection()抛出java.io.IOException{returnhandler.openConnection(this);}publicfinalInputStreamopenStream()throwsjava.io.IOException{returnopenConnection().getInputStream();}}2.URLConnection**/***抽象类URLConnection是表示应用程序和URL之间的通信链接的所有类的超类。此类的实例可用于读取或写入此URL引用的资源。*通常,创建URL连接是一个多步骤过程:*openConnection()->connect()*1.当在URL对象上调用openConnection时,会创建一个连接对象*2.设置参数和一般请求属性操纵。*3.使用connect方法与远程对象建立实际连接。*4.远程对象可用。可以检索远程对象的标头信息、字段和内容。*设置参数可以通过以下方法修改:*setAllowUserInteraction*setDoInput*setDoOutput*setIfModifiedSince*setUseCaches*一般请求属性可以通过以下方法修改:*setRequestProperty*AllowUserInteraction和UseCaches参数的默认值可以通过setDefaultAllowUserInteraction设置和设置默认使用缓存。*以上每个set方法都有对应的get方法来获取参数或通用请求属性的值。*以下方法用于获取远程通信对象创建后的头部、字段和内容:*getContent*getHeaderField*getInputStream*getOutputStream*一些特定的头部字段通过以下方式获取:*getContentEncoding*getContentLength*getContentType*getDate*getExpiration*getLastModifed*提供了一种获取这些字段的便捷方式。*getContentType方法用于getContent方法判断远程对象的类型;子类可能会发现覆盖getContentType方法很方便。*通常情况下,所有预连接参数和一般请求属性都可以忽略:预连接参数和请求属性默认为合理的值。*对于此接口的大多数客户端,只有两个方法值得关注:getInputStream和getContent,它们通过便捷方法镜像到URL类中。*在为URLConnection请求调用InputStream或OutputStream的close()方法后,与此实例关联的网络资源可能会被释放,除非特定的协议规范为其指定了不同的行为。*/publicabstractclassURLConnection{}**3.URLStreamHandler/***这个抽象类是所有流协议处理管理类的总父类。流协议的处理程序知道如何为特定协议创建连接,例如httphttps*在大多数情况下,应用程序不直接创建URLStreamHandler子类的实例。相反,在构造URL时,第一次遇到协议时,会自动加载适当的流协议处理程序。*/publicabstractclassURLStreamHandler{/***为URL参数引用的对象打开一个连接,该方法应该被子类覆盖。*如果有一个公共的、专门的URLConnection子类属于以下包之一或其处理程序协议的子包之一:java.lang\java.io\java.util\java.net,返回的连接将是将是这个子类。例如:*对于HTTP协议,将返回一个HttpURLConnection,对于JAR协议,将返回一个JarURLConnection。*/abstractprotectedURLConnectionopenConnection(URLu)throwsIOException;}java注释写的非常好,通过注释我们大概了解了java中是如何读写URL资源的,以及java中是如何实现自定义URL的具体协议的读写,比如JAR协议,可以看看如何通过jar加载类和相关内容。
