次のプログラムを見てください。
新しいクラスは、おそらく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 -->