next up previous contents
Next: URLConnection クラスと getInputStream() Up: Stream Previous: ストリームを使ったネットワーク・プログラミング

URLクラスと openStream()

次のプログラムを見てください。

新しいクラスは、おそらく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 -->


maruyama@wakhok.ac.jp