Authority =
Default port =
File = /articles/l
Host =
Path = /articles/l
Port =
Protocol = http
Query = null
Ref = null
User Info = null
<html>
<head>
<title>
Java Jeff Articles
</title>
<meta httpequiv=ContentType content=text/html;
charset=ISO>
<meta name=author content=Jeff Friesen>
<meta name=keywords content=java virtual machine>
<script language=JavaScript>
if (navigatorappName == Netscape)
documentwrite (<br>);
</script>
</head>
<body bgcolor=#>
<center>
<table border= cellpadding= cellspacing=>
<tr>
<td>
<table cellpadding= cellspacing=>
<tr>
<td>
<a href=informit/l>
<img alt=InformIT border= src=informitgif></a>
</td>
</tr>
</table>
</td>
<td align=middle>
<img src=titlegif><br>
<a href=/welcome/l>
<img alt=Welcome to Java Jeff! border= src=jupiterjpg>
</a><br>
<img src=/common/clear_dotgif vspace=><br>
<a href=/ads/l>
<img alt=Welcome to Java Jeff! border=
rc=jupiterjpg>
</td>
<td>
<table cellpadding= cellspacing=>
<tr>
<td>
<a href=javaworld/l>
<img alt=JavaWorld border= src=javaworldgif></a>
</td>
</tr>
</table>
</td>
</tr>
</table>
</center>
<br>
<font color=#ffffff>
<center>
Best viewed at a resolution of x or higher<br>
<img src=/common/clear_dotgif vspace=><br>
<i>
Copyright ? Jeff Friesen All rights
reserved
</i>
<p>
<a href=/l>
<img alt=Back border= src=/common/backgif></a>
</center>
</font>
</body>
</html>
在上面的信息中输出标识符是默认端口HTTP是协议上面给出的是输出的HTML页面的源代码
URL的openStream()方法通常返回抽象的InputStream类的一个具体的子类所建立的对象的引用这意味着你必须按字节次序读取资源数据这种做法是恰当的因为你不知道将要读取的数据是什么类型的如果你事先知道要读取的数据是文本的并且每一行以换行符(\n)结束你就可以按行读取而不是按字节读取数据了
下面的代码片断演示了把一个InputStream对象包装进javaioInputStreamReader对象以从位过渡到位字符把结果对象包装进javaioBufferedReader对象以访问BufferedReader的readLine()方法并调用readLine()方法从资源读取文本的所有行
InputStream is = urlopenStream ();
BufferedReader br = new BufferedReader (new InputStreamReader (is));
String line;
while ((line = brreadLine ()) != null)
Systemoutprintln (line);
isclose ();
有时候按字节的次序读取数据并不方便例如如果资源是JPEG文件那么获取一个图像处理过程并向该过程注册一个用户使用数据的方法更好当图像完整下载后立即显示它并不困难如果出现这种情况你就有必要使用getContent()方法
当调用getContent()方法时它会返回某种对象的Object引用而你可以调用该对象的方法(在转换成适当的类型后)采用更方便的方式检索数据但是在调用该方法前你必须使用instanceof验证对象的类型防止类产生异常
对于JPEG资源getContent()返回一个对象该对象的类实现了javaawtImageImageProducer接口下面的代码片断演示了使用instanceof验证对象是ImageProducer的并进行了转换接下来可以调用ImageProducer方法注册一个用户并初始化图像的使用过程
URL url = new URL (args []);
Object o = urlgetContent ();
if (o instanceof ImageProducer)
{
ImageProducer ip = (ImageProducer) o;
//
}
技巧
调用URL的equals(Object o)和sameFile(Object o)方法来决定两个URL是否相同第一个方法包含了比较的片断而第二个方法没有包含你可以参阅SDK文档查找更多信息
查看一下getContent()方法的源代码你会找到openConnection()getContent()此外查看一下openStream()方法的源代码你会发现openConnection()getInputStream()每个方法都首先调用URL的openConnection()方法
这个方法返回抽象的URLConnection类(描述与某些资源的连接)的一个子类建立的对象的引用URLConnection的方法反映了资源和连接的细节信息使我们能编写代码向资源写入信息
列表的URLDemo源代码演示了openConnection()以及调用一些URLConnection的方法
列表: URLDemojava
// URLDemojava
import javaio*;
import *;
import javautil*;
class URLDemo
{
ublic static void main (String [] args) throws IOException
{
if (argslength != )
{
Systemerrprintln (usage: java URLDemo url);
return;
}
URL url = new URL (args []);
// 返回代表某个资源的连接的新的特定协议对象的引用
URLConnection uc = urlopenConnection ();
// 进行连接
nnect ();
// 打印多种头部字段的内容
Map m = ucgetHeaderFields ();
Iterator i = mentrySet (erator ();
while (ihasNext ())
Systemoutprintln (inext ());
// 如果资源允许输入和输出操作就找出来
Systemoutprintln (Input allowed = +ucgetDoInput ());
Systemoutprintln (Output allowed = +ucgetDoOutput ());
}
}