Java网络编程之URI、URL研究(下) 03

来源:互联网 发布:金融大数据服务平台 编辑:程序博客网 时间:2024/05/22 11:44
 URL的openStream()方法通常返回抽象的InputStream类的一个具体的子类所建立的对象的引用。这意味着你必须按字节次序读取资源数据,这种做法是恰当的,因为你不知道将要读取的数据是什么类型的。如果你事先知道要读取的数据是文本的,并且每一行以换行符(/n)结束,你就可以按行读取而不是按字节读取数据了。

  下面的代码片断演示了把一个InputStream对象包装进java.io.InputStreamReader对象以从8位过渡到16位字符,把结果对象包装进java.io.BufferedReader对象以访问BufferedReader的readLine()方法,并调用readLine()方法从资源读取文本的所有行。

InputStream is = url.openStream ();
BufferedReader br = new BufferedReader (new InputStreamReader (is));
String line;
while ((line = br.readLine ()) != null)
System.out.println (line);
is.close ();

  有时候按字节的次序读取数据并不方便。例如,如果资源是JPEG文件,那么获取一个图像处理过程并向该过程注册一个用户使用数据的方法更好。当图像完整下载后立即显示它并不困难。如果出现这种情况,你就有必要使用getContent()方法。

  当调用getContent()方法时,它会返回某种对象的Object引用,而你可以调用该对象的方法(在转换成适当的类型后),采用更方便的方式检索数据。但是在调用该方法前,你必须使用instanceof验证对象的类型,防止类产生异常。

  对于JPEG资源,getContent()返回一个对象,该对象的类实现了java.awt.Image.ImageProducer接口。下面的代码片断演示了使用instanceof验证对象是ImageProducer的,并进行了转换。接下来可以调用ImageProducer方法注册一个用户并初始化图像的使用过程。

URL url = new URL (args [0]);
Object o = url.getContent ();
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()方法。这个方法返回抽象的java.net.URLConnection类(描述与某些资源的连接)的一个子类建立的对象的引用。URLConnection的方法反映了资源和连接的细节信息,使我们能编写代码向资源写入信息。

  列表5的URLDemo2源代码演示了openConnection(),以及调用一些URLConnection的方法。

  列表5: URLDemo2.java

// URLDemo2.java

import java.io.*;
import java.net.*;
import java.util.*;

class URLDemo2
{
public static void main (String [] args) throws IOException
{
if (args.length != 1)
{
System.err.println ("usage: java URLDemo2 url");
return;
}

URL url = new URL (args [0]);

// 返回代表某个资源的连接的新的特定协议对象的引用

URLConnection uc = url.openConnection ();

// 进行连接

uc.connect ();

// 打印多种头部字段的内容

Map m = uc.getHeaderFields ();
Iterator i = m.entrySet ().iterator ();

while (i.hasNext ())
System.out.println (i.next ());

// 如果资源允许输入和输出操作就找出来

System.out.println ("Input allowed = " +uc.getDoInput ());

System.out.println ("Output allowed = " +uc.getDoOutput ());
}
}
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 3岁宝宝啥也不吃怎么办 1岁多宝宝不吃饭怎么办 胃口吃辣的难受怎么办 空腹吃辣椒胃疼怎么办 吃东西辣的胃口疼怎么办 吃辣的东西胃烧怎么办 吃母乳的宝宝不爱喝水怎么办 三个月宝宝不肯吃奶粉怎么办 三个月宝宝不肯喝奶粉怎么办 三个月的宝宝不肯喝奶粉怎么办 三个月的宝宝不肯吃奶粉怎么办 饿了还是没食欲怎么办 3岁半幼儿便秘怎么办 小孩字写得难看怎么办 小孩的字写的丑怎么办 小孩字写的太差怎么办 小孩很多字不会写怎么办 食欲不好吃不多怎么办 中班小孩子子不肯写字怎么办 1岁宝便秘该怎么办 两周的宝宝便秘怎么办 3岁宝宝不肯吃药怎么办 1岁婴儿不肯吃药怎么办 9月婴儿不肯吃药怎么办 半岁宝宝不吃药怎么办 1岁宝宝不爱吃药怎么办 2岁吃多了呕吐怎么办啊 小孩吃撑了吐怎么办 三岁宝宝吃太多怎么办 小孩吃撑发烧了怎么办 婆婆不帮忙带孩子怎么办 孩子在中班幼儿园不爱写字怎么办 小孩不愿意上学不愿意写字怎么办 宝妈太内向不喜欢带孩子出门怎么办 宝宝吃饭不带围兜怎么办 宝宝吃饭不喜欢带围兜怎么办 宝宝吃饭不爱带围兜怎么办 孩子不吃肉和菜怎么办 我很恶心我婆婆怎么办 坐月子不喜欢婆婆抱宝宝怎么办 宝宝一写字就哭怎么办