次のプログラムを見てください。
新しいクラスは、おそらくURLだけだと思います。Java に興味を持っている 人で、URLを知らない人はいないと思います。 肝心なのは、次のシークエンスです。
URL u = new URL( src );
InputStream in = u.openStream() ;
最初の文での srcはStringで、"http://www.wakhok.ac.jp" のように、URLが 文字列の形式で入っています。問題は、次の文で、URLクラスのインスタンス u に対して、openStream()というメソッドを適用すると、それだけで、そのURLを 源とするストリームが作れてしまうのです。
いったんストリームが与えられれば、あとは、前回見たコピー・プログラムと
ほとんど同じ考えで、インターネット上のURLで指定されるリソースの内容を
表示する事が出来ます。
リスト1に、このプログラムの出力例をあげておきます。ここでは、
URL : http://www.sun.com の内容が表示されています。
「ストリーム」という抽象のレベルでは、情報の流れに着目して、その端点の性格は 捨象されています。ファイルの中味を表示する、例えば cat のような プログラムと、ネットワーク上のURLの中味を表示する、今回のJava でのサンプル・ プログラムが、同じ構造を持つことは、ある意味では自然なことです。 ただ、「ファイル入出力はファイル・ディスクリプタ、ネットワークはソケット」 という、UNIX/Cのプログラムのスタイルでは、二つのプログラムの構造の同質性 よりも、その違いが目立つことになります。
****************************
** UrlStream.java
****************************
1 import java.net.*;
2 import java.io.*;
3
4 class UrlStream {
5
6 UrlStream(String src){
7 try {
8
9 URL u = new URL( src );
10 InputStream in = u.openStream() ;
11 byte buf[] = new byte[256];
12 int n;
13
14 while((n = in.read(buf, 0, buf.length)) != -1){
15 System.out.write(buf,0,n);
16 }
17
18 } catch (Exception e){
19 System.err.println("Exception : "+e);
20 }
21 }
22
23 public static void main(String argv[]){
24 try {
25 UrlStream us = new UrlStream(argv[0]);
26 } catch (Exception e){
27 System.err.println("Exception (main) : "+e);
28 }
29
30 }
31 }
\begin{verbatim}
\begin{small}
\subsubsection{リスト1}
\begin{small}
\begin{verbatim}
sparc04$ java UrlStream http://www.sun.com <--- プログラムの実行
<!-- HEAD_START -->
<HTML>
<HEAD>
<TITLE>Sun Microsystems</TITLE>
<META HTTP-EQUIV="Expires" CONTENT="July 1996 21:29:02 GMT">
</HEAD>
<body bgcolor=**ffffff vlink=**551a8b alink=**ff0000 link=**0000ee text=**000000>
<!-- HEAD_END -->
<A HREF="/960601/homepage.map"><IMG BORDER=0 SRC="/960601/homepage.6-1.gif" ALT="Highly graphic homepage" ISMAP WIDTH=580 HEIGHT=576></A>
<center>
<font size=+1><strong>Sun Unveils <a href=/netra-nfs/index.html>New Netra NFS Server </a></strong></font>
<p>Sun Microsystems <A HREF="/960601/index.textonly.html">text-only</A> home page.
A <A HREF="/960601/index.java.html">java</a> version of the home page.
</center>
<!-- FOOT_START -->
<HR>
<FONT SIZE=2> Questions or comments regarding this service?
sun.com</EM></A></FONT>
<P>
<H5><A HREF="/share/text/SMIcopyright.html">Copyright</A> 1996 Sun Microsystems, Inc., 2550 Garcia Ave., Mtn. View, Ca 94043-1100 USA. All Rights Reserved</H5></BODY>
</HTML>
<!-- FOOT_END -->