(57)【特許請求の範囲】
【請求項１】
情報処理装置内でＩ／Ｏ（入出力）動作を実行するための方法であって、
プログラムにデータを渡し、かつ前記プログラムからデータを渡すためのＩ／Ｏクラスを定義するステップと、
ウェブ・ブラウザに結合されていないインタープリタ・マシン（ＩＭ）上での実行のためのインタープリタ・ベース・プログラム用の前記Ｉ／Ｏクラスに基づく第１のクラス・メソッドと、及びウェブ・ブラウザに結合されているＩＭ上での実行のための前記Ｉ／Ｏクラスに基づく第２のクラス・メソッドとを有するオブジェクトであって、かつＩ／Ｏ動作を実行するための独自の手続きおよびデータ変数を有するところの前記Ｉ／Ｏクラスのインスタンスであるオブジェクトを作成するステップと、
前記プログラムから未知の長さのデータを渡す要求を受け取るステップと、
前記未知の長さのデータを書き込むために前記情報処理装置内でローカル・バッファを割り振るステップと、
前記ローカル・バッファ内に前記未知の長さのデータを書き込むステップと、
前記ローカル・バッファ内の前記未知の長さのデータの長さを判定するステップと、
前記バッファ内の前記データとともに前記データの長さを前記プログラムから渡すステップと、及び
前記インタープリタ・ベース・プログラムが、ウェブ・ブラウザに結合されていないＩＭ上で実行されているか或いはウェブ・ブラウザに結合されているＩＭ上で実行されているかを判断するためのチェックをして、
前記インタープリタ・ベース・プログラムが、ウェブ・ブラウザに結合されていないＩＭ上で実行されている場合に、前記第１のクラス・メソッドを実行し、この際に前記第１のクラス・メソッドは、前記インタープリタ・ベース・プログラムの実行中にＩ／Ｏ動作を実行し、
前記インタープリタ・ベース・プログラムが、ウェブ・ブラウザに結合されているＩＭ上で実行されている場合に、前記第２のクラス・メソッドを実行し、この際に前記第２のクラス・メソッドは、前記インタープリタ・ベース・プログラムの実行中にＩ／Ｏ動作を実行するところのステップと
を含む方法。
【請求項２】
前記データの長さを前記プログラムから渡すステップが、
ハイパーテキスト転送プロトコル（ＨＴＴＰ）によって必要とされるコンテント長ヘッダ・フィールドにおける前記データの長さを渡すサブステップと、及び
ＨＴＴＰ標準によって定義される前記メッセージにおける前記エンティティ本体の一部としてデータ自身を渡すサブステップと、
を含む、請求項１に記載の方法。
【請求項３】
実行のためのインタープリタ・ベース・プログラム用の前記Ｉ／Ｏクラスに基づく第１のクラス・メソッドを有するオブジェクトを生成する前記ステップが、Ｊａｖａ・ベース・プログラムを使用し、実行のためのインタープリタ・ベース・プログラム用の前記Ｉ／Ｏクラスに基づく第１のクラス・メソッドを有するオブジェクトを生成することを含む、請求項１に記載の方法。
【請求項４】
前記ウェブ・ブラウザに結合されていないＩＭ上での実行のための前記ステップにおいて、前記インタープリタ・ベース・プログラムがＪａｖａアプリケーションである、請求項１に記載の方法。
【請求項５】
ウェブ・ブラウザに結合されているＩＭ上での実行のための前記ステップにおいて、前記インタープリタ・ベース・プログラムがＪａｖａアプレットである、請求項１に記載の方法。
【請求項６】
ＩＭ上での実行のためのインタープリタ・ベース・プログラム用の前記Ｉ／Ｏクラスに基づく第１のクラス・メソッドを有するオブジェクトを生成する前記ステップにおいて、Ｊａｖａ仮想マシンを実行する前記ＩＭを含む、請求項１に記載の方法。
【請求項７】
前記情報処理装置内にデータを渡し、かつ前記情報処理装置からデータを渡すためのＩ／Ｏクラスを定義するステップをさらに含み、前記データを渡す動作の少なくとも一部がファイル名を使用する、請求項１に記載の方法。
【請求項８】
情報処理装置内でＩ／Ｏ（入出力）動作を実行するためのプログラム命令を含むコンピュータ読取可能な記録媒体であって、
プログラムにデータを渡し、かつ前記プログラムからデータを渡すためのＩ／Ｏクラスを定義するステップと、
ウェブ・ブラウザに結合されていないインタープリタ・マシン（ＩＭ）上での実行のためのインタープリタ・ベース・プログラム用の前記Ｉ／Ｏクラスに基づく第１のクラス・メソッドと、及びウェブ・ブラウザに結合されているＩＭ上での実行のための前記Ｉ／Ｏクラスに基づく第２のクラス・メソッドとを有するオブジェクトであって、かつＩ／Ｏ動作を実行するための独自の手続きおよびデータ変数を有するところの前記Ｉ／Ｏクラスのインスタンスであるオブジェクトを作成するステップと、
前記プログラムから未知の長さのデータを渡す要求を受け取るステップと、
前記未知の長さのデータを書き込むために当該情報処理装置内でローカル・バッファを割り振るステップと、
前記ローカル・バッファ内に前記未知の長さのデータを書き込むステップと、
前記ローカル・バッファ内の前記未知の長さのデータの長さを判定するステップと、
前記バッファ内の前記データとともに前記データの長さを前記プログラムから渡すステップと、及び
前記インタープリタ・ベース・プログラムが、ウェブ・ブラウザに結合されていないＩＭ上で実行されているか或いはウェブ・ブラウザに結合されているＩＭ上で実行されているかを判断するためのチェックをして、
前記インタープリタ・ベース・プログラムが、ウェブ・ブラウザに結合されていないＩＭ上で実行されている場合に、前記第１のクラス・メソッドを実行し、この際に前記第１のクラス・メソッドは、前記インタープリタ・ベース・プログラムの実行中にＩ／Ｏ動作を実行し、
前記インタープリタ・ベース・プログラムが、ウェブ・ブラウザに結合されているＩＭ上で実行されている場合に、前記第２のクラス・メソッドを実行し、この際に前記第２のクラス・メソッドは、前記インタープリタ・ベース・プログラムの実行中にＩ／Ｏ動作を実行するところのステップと
を実行するプログラム命令を含むコンピュータ読取可能な記録媒体。
【請求項９】
前記データの長さを前記プログラムから渡すステップが、
ハイパーテキスト転送プロトコル（ＨＴＴＰ）によって必要とされるコンテント長ヘッダ・フィールドにおける前記データの長さを渡すサブステップと、及び
ＨＴＴＰ標準によって定義される前記メッセージにおける前記エンティティ本体の一部としてデータ自身を渡すサブステップと、
を実行するためのプログラム命令をさらに含む請求項８に記載のコンピュータ読取可能な記録媒体。
【請求項１０】
実行のためのインタープリタ・ベース・プログラム用の前記Ｉ／Ｏクラスに基づく第１のクラス・メソッドを有するオブジェクトを生成する前記ステップが、Ｊａｖａ・ベース・プログラムを使用し、実行のためのインタープリタ・ベース・プログラム用の前記Ｉ／Ｏクラスに基づく第１のクラス・メソッドを有するオブジェクトを生成することを含むところのプログラム命令を含む請求項８に記載のコンピュータ読取可能な記録媒体。
【請求項１１】
前記ウェブ・ブラウザに結合されていないＩＭ上での実行のための前記ステップにおいて、前記インタープリタ・ベース・プログラムがＪａｖａアプリケーションであるところのプログラム命令を含む請求項８に記載のコンピュータ読取可能な記録媒体。
【請求項１２】
ウェブ・ブラウザに結合されているＩＭ上での実行のための前記ステップにおいて、前記インタープリタ・ベース・プログラムがＪａｖａアプレットであるところのプログラム命令を含む請求項８に記載のコンピュータ読取可能な記録媒体。
【請求項１３】
ＩＭ上での実行のためのインタープリタ・ベース・プログラム用の前記Ｉ／Ｏクラスに基づく第１のクラス・メソッドを有するオブジェクトを生成する前記ステップにおいて、Ｊａｖａ仮想マシンを実行する前記ＩＭを含むところのプログラム命令を含む請求項８に記載のコンピュータ読取可能な記録媒体。
【請求項１４】
前記情報処理装置内にデータを渡し、かつ前記情報処理装置からデータを渡すためのＩ／Ｏクラスを定義するステップをさらに含み、前記データを渡す動作の少なくとも一部がファイル名を使用するところのプログラム命令を含む請求項８に記載のコンピュータ読取可能な記録媒体。
【請求項１５】
Ｉ／Ｏ（入出力）を実行するための情報処理システムであって、
プログラムにデータを渡し、かつ前記プログラムからデータを渡すためのＩ／Ｏクラスと、
ウェブ・ブラウザに結合されていないインタープリタ・マシン（ＩＭ）上での実行のためのインタープリタ・ベース・プログラム用の前記Ｉ／Ｏクラスに基づく第１のクラス・メソッドと、及びウェブ・ブラウザに結合されているＩＭ上での実行のための前記Ｉ／Ｏクラスに基づく第２のクラス・メソッドとを有するオブジェクトであって、かつＩ／Ｏ動作を実行するための独自の手続きおよびデータ変数を有するところの前記Ｉ／Ｏクラスのインスタンスである前記オブジェクトと、
前記プログラムから未知の長さのデータを渡す要求を受け取るための手段と、
前記未知の長さのデータを書き込むためのローカル・バッファと、
前記ローカル・バッファ内に前記未知の長さのデータを書き込むための手段と、
前記ローカル・バッファ内の前記未知の長さのデータの長さを判定するための手段と、
前記バッファ内の前記データとともに前記データの長さを前記プログラムから渡すための手段と、及び
前記インタープリタ・ベース・プログラムが、ウェブ・ブラウザに結合されていないＩＭ上で実行されているか或いはウェブ・ブラウザに結合されているＩＭ上で実行されているかを判断するためのチェックをして、
前記インタープリタ・ベース・プログラムが、ウェブ・ブラウザに結合されていないＩＭ上で実行されている場合に、前記第１のクラス・メソッドが実行されるようにし、かつ前記インタープリタ・ベース・プログラムが、ウェブ・ブラウザに結合されているＩＭ上で実行されている場合に、前記第２のクラス・メソッドを実行されるようにするために、前記インタープリタ・ベース・プログラムの実行中にＩ／Ｏ動作を実行するための前記第１のクラス・メソッドまたは前記第２のクラス・メソッドのうちの１つを実行するための手段と
を含む、情報処理システム。
【請求項１６】
前記渡すための手段が、
前記データの長さを渡すために、ハイパーテキスト転送プロトコル（ＨＴＴＰ）によって必要とされるコンテント長ヘッダ・フィールドと、及び
前記データ自身を渡すために、ＨＴＴＰ標準によって定義される前記メッセージにおける前記エンティティ本体と、
を含む、請求項１５に記載の情報処理システム。
【請求項１７】
前記インタープリタ・ベース・プログラムが、Ｊａｖａ・ベース・プログラムである、請求項１５に記載の情報処理システム。
【請求項１８】
前記インタープリタ・ベース・プログラムが、Ｊａｖａ・アプリケーションである、請求項１５に記載の情報処理システム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
開示される発明は、広義にはコンピュータ・ソフトウェア開発の分野に関し、具体的には、JavaアプリケーションおよびJavaアプレットのためのアプリケーション開発用のソフトウェア・ツールキットの分野に関する。本発明は、ソフトウェア開発者に、JavaアプリケーションとJavaアプレットの両方のための一貫性のある入出力（Ｉ／Ｏ）関数インターフェースを提供する。
【０００２】
【従来の技術】
Javaは、Sun Microsystems社によって開発されたプログラミング言語である。Javaプログラミングの背後にある基本的な発想は、同一のJavaソフトウェア・コードが多数の異なる種類のコンピュータ上で走行できるということである。別の表現をすると、Javaの目標は、すべてのJava準拠プラットフォーム上で走行するためにソフトウェアを１回だけ記述することである。これらの異なるプラットフォームには、ＲＩＳＣ、ＰＣ、Macintosh、Sparcなどの異なるハードウェア・プラットフォームと、Windows 95／ＮＴ、Unix、ＡＩＸ、Copelandなどの異なるオペレーティング・システム・プラットフォームの両方が含まれる。これらのプラットフォームは、大型サーバからシン・クライアント、パーソナル・ディジタル・アシスタントなどの小型可搬消費者デバイスまで、完全に異なる計算機の大きなクラスを包含する。Javaに基づくソフトウェア・アプリケーション（単にJavaアプリケーションとも称する）を開発するためのソフトウェア・プログラミング・ツールは、Sun Microsystems社（オンラインＵＲＬ www.sun.com/javaを参照されたい）を含むさまざまな供給業者から入手可能である。Javaアプリケーションの入出力（Ｉ／Ｏ）動作を実行するためのソフトウェア・ツールを、Java I/Oツールキットと称する。このJava I/Oツールキットは、ソフトウェア開発者に、Javaアプリケーションが実行されるハードウェア・プラットフォームのローカルなファイルを読み書きするためのオブジェクト指向関数のライブラリを提供する。他のJava I/Oツールキット関数には、ネットワークを介する他のＩ／Ｏ機能の実行が含まれる。１つの例が、リモート・サーバのファイルの読み書きである。
【０００３】
Javaの開発中に、インターネットおよびより具体的にはワールド・ワイド・ウェブ（「ウェブ」）が、主に情報を簡単に見つけられることと現在のブラウザのユーザ・フレンドリさが原因で、非常に一般的になった。ハイパーテキストと称する特徴を用いると、ユーザは、単にハイパーテキストをポイント（マウスなどのポインティング装置を使用する）し、クリックすることによって、あるウェブ・ページから別のウェブ・ページの情報にアクセスできるようになる。ウェブを魅力的にしているもう１つの特徴が、アクセスされる内容の種類のそれぞれのために特化されたアプリケーション・プログラムを有する必要なしに、リモート・ウェブ・ページの情報（または内容）にアクセスできる能力を有することである。したがって、同一の内容を、異なるプラットフォームにまたがって表示することができる。ブラウザ技術が進歩して、広範囲の異なるプラットフォームにまたがってこの内容を操作するアプリケーションを実行できるようになった。
【０００４】
１９９５年に、Sun Microsystems社は、公式にHotJavaを導入した。HotJavaは、Javaコードを実行することのできるウェブ・ブラウザである。Netscape NavigatorやMicrosoft Internet Explorerなどの他のウェブ・ブラウザは、それ以降、彼らの基本ウェブ・ブラウザ製品にJava機能を追加してきた。ウェブ・ブラウザ技術とJava技術の組み合わせは、Javaの魅力の基礎すなわち、１回アプリケーションを記述するだけでウェブ・ブラウザを含むさまざまなプラットフォームでアプリケーションを実行する能力を高めた。Javaコードの大半は、Java準拠ウェブ・ブラウザを含むプラットフォームにおいてポータブルであるが、フレームへハンドルを返したり、入出力（Ｉ／Ｏ）を処理するものなどの一部の関数はポータブルでない。２つのカテゴリのJavaベース・プログラムが必要である。Javaベース・プログラムの第１のカテゴリは、Javaアプリケーションと呼ばれ、ウェブ・ブラウザと組み合わされないコンピュータ・プラットフォームで動作する。Javaベース・プログラムの第２のカテゴリは、Javaアプレットと呼ばれ、Java準拠ウェブ・ブラウザを使用するシステムで動作する。多数の関数がアプレットおよびアプリケーションのJava実行時環境において互換でない理由は、セキュリティの問題に起因する。Javaアプレットは、通常は、アクセスされているウェブ・ブラウザによってロードされる。アプレットは、その設計によって、ローカル記憶装置を読み書きすることができない。この入出力に関する意図的な制限は、エンド・ユーザのコンピュータ・システムに気付かれずに変更を加えるコンピュータ・ウィルスとしてのJavaアプレットの破壊的な使用を最小にするために設計された。ローカルな読み書きアクセスを実行できるJavaアプレットは、ユーザ・コンピュータ・システムに対する、削除、リネーム、スクランブリングその他の破壊活動によって、簡単に大混乱を引き起こすことができる。
【０００５】
【発明が解決しようとする課題】
Javaベース・プログラムのこれらのカテゴリすなわちJavaアプリケーションとJavaアプレットの両方が、特殊Ｉ／Ｏ処理を必要とする。この特殊Ｉ／Ｏは、Javaアプレット用に１つのクラス、Javaアプリケーション用に１つのクラスの、Java I/Oツールキットの２つの異なるJavaクラスの使用によって処理される。２つのクラスが必要なので、Javaベースのソフトウェア・アプリケーションを作成することを望む開発者は、各実行時環境すなわちJavaアプレットとJavaアプリケーションを異なる形で扱わなければならない。これらの異なるJava I/Oツールキット要件のゆえに、ソフトウェア開発者は、これら２つのJava I/Oクラスのそれぞれを処理するために別々のコードを開発することを強制される。したがって、前記の問題を克服する、JavaアプリケーションとJavaアプレットの両方によって使用できるＩ／Ｏクラス・インターフェースを提供する方法が必要である。
【０００６】
JavaアプリケーションまたはJavaアプレットの使用に伴うもう１つの問題は、出力ストリームの記述のプロセスにある。ＨＴＴＰ（ハイパーテキスト転送プロトコル）は、インターネットのベースである分散協調コンピューティングのために必要な軽さと速度を有するアプリケーション・レベルのプロトコルである。ＨＴＴＰ／１．０プロトコルに関する情報は、オンラインＵＲＬ http://www.w3.org/Protocols/rfc1945/rfc1945を介して、World Wide Web（Ｗ３）Consortiumから入手できる。ＨＴＴＰプロトコルを使用するアプリケーションが、サーブレットにデータを転送する時には、ＨＴＴＰプロトコルの要件は、データ（エンティティ本体と称する）に、送信されるメッセージの長さ（コンテント長と称する）が含まれなけれならないということである。この、メッセージ送信の前にメッセージの長さを書き込むという要件は、アプリケーションがメッセージ送信の前にメッセージの長さを知らない場合に問題になり得る。ＨＴＴＰ／１．０プロトコルによって教示される、未知の長さのデータを転送するための代替方法は、アプリケーションとサーバの間の接続を終了することである。しかし、接続を再確立しなければならないという要件は、特に頻繁に繰り返してデータの転送を必要とするアプリケーションの場合に、大きい負担になり得る。したがって、サーバへの接続を終了せずに、Javaプログラム内で未知の長さのメッセージを書き込む方法が必要である。
【０００７】
Javaアプリケーションを使用してサーバに未知の長さのデータまたはメッセージを転送することに伴うもう１つの問題は、１つの解決策をJavaアプリケーションとJavaアプレットの両方で機能させるというソフトウェア側の要望である。したがって、JavaアプリケーションとJavaアプレットの両方によって使用することのできる、未知の長さのデータを転送する１つの方法を提供する必要がある。
【０００８】
【課題を解決するための手段】
手短に言うと、本発明によれば、情報処理装置内のインタープリタ・マシン（Interpretative Machine）上で実行されるインタープリタ・ベースのプログラムのためにＩ／Ｏ（入出力）動作を実行するための方法が開示される。この方法には、インタープリタ・ベースのプログラムをインタープリタ・マシンで実行するステップと；プログラムから未知の長さのデータを渡す要求を受け取るステップと；未知の長さのデータを書き込むために情報処理装置内でローカル・バッファを割り振るステップと；未知の長さのデータをローカル・バッファに書き込むステップと；ローカル・バッファ内の未知の長さのデータのサイズを判定するステップと；データの長さをバッファ内のデータと組み合わせてプログラムから渡すステップとが含まれる。本発明のもう１つの態様によれば、前記の方法を実行するためのコンピュータ可読媒体が説明される。
【０００９】
【発明の実施の形態】
多数のプログラミング用語、特にオブジェクト指向プログラミング用語が、本明細書と請求項で使用される。Javaで使用されるオブジェクト指向用語の短い一覧を示す。
【００１０】
この開示で使用される用語の用語集
「クラス」オブジェクトの記述。たとえば、円、長方形および三角形のオブジェクトを含む、形状と称するクラスがある場合がある。クラスは、それに属する異なるオブジェクトに共通するすべての特性を定義する。注意：上の例では、長方形などの各オブジェクト自体が、特定のクラスに属する共通の特性を有するクラス（オブジェクトはクラスのインスタンスである）になる場合がある。長方形の場合、この特性は、長方形の長さと幅である。
「インタープリタ・マシン（Interpretative Machine）」コンパイルやリンクなどの中間ステップを必要とせずにソース・コードを実行するための、ＢＡＳＩＣおよびJavaを含むインタープリタ型プログラミング言語のための実行時環境。
Javaの場合、これはJava仮想マシン（ＶＭ）である。ＢＡＳＩＣの場合、これはＢＡＳＩＣインタープリタである。
「入力」プログラムへ入るデータ・フロー。
「オブジェクト」オブジェクトは、データとそのデータを操作するための手続きの両方からなる、自己完結型の実体（エンティティ）である。オブジェクトは、クラスのインスタンスである。
「出力」プログラムから出るデータ・フロー。
「メソッド」クラスのメンバ関数。
「手続き」プログラム内の１つまたは複数の点で使用することのできる、プログラミング命令のシーケンス。手続きは、通常は１つまたは複数の入力パラメータを有し、１つまたは複数の出力パラメータを作ることができる。手続きは、関数またはルーチンとも称する。
「ストリーム」アプリケーションまたはプログラムに出入りするデータの流れを指す抽象概念。ストリーム出力は、ファイル、プリンタ、ディスプレイ、ネットワークまたは、データを受け取るためにコンピュータに結合された装置へデータを書き込む処理を指す。入力ストリームは、ファイル、キーボード入力、マウス、ネットワークまたはコンピュータに結合された他の装置からデータを読み取る処理を指す。
【００１１】
説明
図１に、ウェブ・ページ１００をホスティング（サービス提供）するための通常の情報処理システムの機能ブロック図を示す。アプリケーション１０３を含むウェブ・サーバ１０１は、インターネット１０５に接続される。ウェブ・ブラウザ１０９を有するエンド・ユーザ情報処理装置１０７は、インターネット１０５に接続される。ウェブ・サーバ１０１は、ＩＢＭ  ＰＣ Server、Sun Sparc Server、ＨＰ  ＲＩＳＣサーバまたは同等物である。ウェブ・ブラウザ１０９は、Netscape Navigator、Sun HotJava Browser、Microsoft Internet Explorerまたは同等物など、ＨＴＴＰ（ハイパーテキスト転送プロトコル）互換製品である。
【００１２】
アプリケーション１０３は、ウェブ・ブラウザ１０９上でウェブ・ページをホスティングするためのウェブ・ページ・サーバ・アプリケーションである。アプリケーション１０３は、Sun Microsystems社のJavaベース・アプリケーションをウェブ・ブラウザ１０９に送信することのできるソフトウェア言語で記述される。ウェブ・サーバ１０１、エンド・ユーザ情報処理装置１０７およびウェブ・ブラウザ１０９のオペレーティング・システムおよびハードウェア構成は、特定のハードウェア構成またはソフトウェア構成に制限されない。これらのシステムは、広範囲のハードウェア・プラットフォームおよびソフトウェア・プラットフォーム上で実施できる。
【００１３】
図２を参照すると、本発明に従って使用される情報処理システム２００の主要な電気的構成要素のブロック図が示されている。情報処理システム２００は、Javaアプレットのためにウェブ・ブラウザ１０９をホスティングするエンド・ユーザ情報処理装置１０７の代表的なハードウェアである。Javaアプリケーション・モードでは、情報処理システム２００は、独立型コンピュータに基づくシステムとすることができる。情報処理システム２００の電気的構成要素には、中央処理装置（ＣＰＵ）２１０、入出力（Ｉ／Ｏ）コントローラ２１１、システム電源およびクロック供給源２１３、ディスプレイ・ドライバ２１５、ＲＡＭ２１７、ＲＯＭ２１９、ＡＳＩＣ（特定用途向けＩＣ）２２１およびハード・ディスク装置２２５が含まれる。これらは、コンピュータの代表的な構成要素である。これらの要素を含むコンピュータの動作は、十分に理解されている。ネットワーク・インターフェース２２３は、イーサネット、ＴＣＰ／ＩＰまたは他の一般的なプロトコルのネットワーク・インターフェースなどのコンピュータ・ネットワークへの接続を提供する。外部周辺機器へのインターフェースのための任意選択の構成要素には、周辺機器接続用のＳＣＳＩポート２３１、ＰＣＭＣＩＡスロット２２９およびシリアル・ポート２２７が含まれる。取外し可能なディスケット２３５へのコードの保存またはロードのための、任意選択のディスケット駆動装置２３３が図示されている。情報処理システム２００は、ハードウェアおよびソフトウェアの組み合わせによって実施することができる。さらに、本発明を使用するために必要な機能性は、本発明に従って実行するように情報処理装置（たとえばパーソナル・コンピュータ）をプログラミングするのに使用されるコンピュータ可読媒体（３．５インチのディスケット２３５など）で実施することができる。
【００１４】
次に図３を参照すると、本発明によるJava実行時環境３００のブロック図が示されている。Java言語は、Sun Microsystems社によって作成された。Javaソフトウェア・ツールおよびJava開発者ツールに関する情報は、オンラインＵＲＬ http://www.sun.com/javaで入手できる。Javaの使用とJavaアプリケーションおよびJavaアプレットの作成は、周知である。ソフトウェア開発者によって書かれたJavaソース・コードは、特定のプラットフォーム用に設計されたフォーマットにコンパイルされるのではなく、実行時環境を有するすべてのシステムで実行できるバイト・コードという中間形式にコンパイルされる。Javaバイト・コード３０１は、ローカル・ハード・ディスクからネットワークを介してJava実行時環境３０３に移される。Javaバイト・コード３０１は、中間形式のバイト・コードであり、これは、プラットフォーム固有のバイト・コードではなく、Java実行時環境を有するすべてのプラットフォームで実行可能である。Java実行時環境３０３は、Javaアプリケーションまたは、Javaアプレットの場合にはウェブ・ブラウザが、オペレーティング・システム３１７とその下層のハードウェア３１９に無関係にすべてのシステムで走行できるようにするプラットフォームである。Javaバイト・コード３０１が、特定のコンピュータ・プラットフォーム用の実行時環境に到着した時に、クラス・ローダ３０５が、Javaバイト・コード３０１によって指定される所与の動作のために１つまたは複数のJavaクラス・ライブラリ３０７を取り出す。Javaバイト・コード３０１とJavaクラス・ライブラリは、Java仮想マシン（ＶＭ）３０９に動的にロードされる。Java ＶＭ ３０９は、Javaプラットフォームの心臓部である。ＵＮＩＸやWindows NTなどの特定のオペレーティング・システム３１７と共に、また、ＨＰ  ＲＩＳＣやIntel Pentiumクラスの計算機などの特定のハードウェア・プラットフォーム３１９と共に動作するようにカスタマイズされるのは、Java ＶＭである。動的コンパイル用のジャスト・イン・タイム・コンパイラ３１３、Javaインタープリタ３１１およびJava実行時システム３１５が、Java ＶＭ ３０９の既知の構成要素である。Java ＶＭ ３０９は、情報処理システム２００などのさまざまなハードウェア・プラットフォーム３１９にまたがる移植性を可能にし、さまざまなオペレーティング・システム３１７にまたがる移植性を可能にする。
【００１５】
Java実行時システム３１５は、Javaバイト・コード３０１とJavaクラス・ライブラリ３０７を解釈して、Javaプログラムを走行させる。Java ＶＭがウェブ・ブラウザと結合される場合、Javaプログラムは、Javaアプレットと呼ばれる。その代わりに、Java  ＶＭがウェブ・ブラウザと結合されない場合には、Javaプログラムは、Javaアプリケーションと呼ばれる。
【００１６】
好ましい実施例では、Java I/Oツールキット用に記述された各関数が、Javaクラス・ライブラリ３０７のメンバである。Javaバイト・コード３０１内の呼出しを介して呼び出される各関数は、動的にロードされる。
【００１７】
ここで図４を参照すると、図４は、本発明による出力ストリーム用のJava I/Oツールキット関数の流れ図である。この流れ図は、１つのパラメータ「ファイル名」４０１を有するJava関数４００から始まる。この関数では、ステップ４０３で、情報処理システム２００のローカル・メモリ、たとえばＲＡＭ２１７内に配列（アレイ）を定義する。ステップ４０５で、バイト・カウンタを０にリセットする。条件関数４０７では、書き込むバイトがあるかどうかを判定するためにテストを行う。書き込むバイトがある場合には、ステップ４０９で配列のサイズを１つ増分し、ステップ４１１でそのバイトをバイト配列に書き込む。ステップ４１３で、バイト・カウンタを１つ増分し、書き込むバイトがなくなるまで、条件ステートメント４０７を介してこの処理を繰り返す。上のステップは、Sun Microsystems社がJava開発者ツールキットと共に出荷するライブラリjava.ioのByteArrayOutputStreamを使用して実装することができる。このメソッドは、ステップ４１５でクローズされる。ステップ４１７で、バイト配列に書き込まれたバイト数を読み取り、この数を使用して、出力ストリームの長さをセットする。ＨＴＴＰ送信の場合、これは、サーブレット・アプリケーションのためのＨＴＴＰ／１．０定義のコンテント長ヘッダである。
【００１８】
本発明の具体的な実施例を開示してきたが、本発明の趣旨および範囲から逸脱せずに、この具体的な実施態様に変更を加えることができることを、当業者は理解するであろう。したがって、本発明の範囲は、この具体的な実施例に制限されるものではなく、特許請求の範囲が、そのような本発明の範囲に含まれる応用例、変更および実施態様のすべてを包含することが意図されている。
【００１９】
まとめとして、本発明の構成に関して以下の事項を開示する。
【００２０】
（１）  情報処理装置内でＩ／Ｏ（入出力）動作を実行するための方法であって、
プログラムにデータを渡し、かつ前記プログラムからデータを渡すためのＩ／Ｏクラスを定義するステップと、
ウェブ・ブラウザに結合されていないインタープリタ・マシン（ＩＭ）上での実行のためのインタープリタ・ベース・プログラム用の前記Ｉ／Ｏクラスに基づく第１のクラス・メソッドと、及びウェブ・ブラウザに結合されているＩＭ上での実行のための前記Ｉ／Ｏクラスに基づく第２のクラス・メソッドとを有するオブジェクトであって、かつＩ／Ｏ動作を実行するための独自の手続きおよびデータ変数を有するところの前記Ｉ／Ｏクラスのインスタンスであるオブジェクトを作成するステップと、
前記プログラムから未知の長さのデータを渡す要求を受け取るステップと、
前記未知の長さのデータを書き込むために前記情報処理装置内でローカル・バッファを割り振るステップと、
前記ローカル・バッファ内に前記未知の長さのデータを書き込むステップと、
前記ローカル・バッファ内の前記未知の長さのデータの長さを判定するステップと、
前記バッファ内の前記データとともに前記データの長さを前記プログラムから渡すステップと、及び
前記インタープリタ・ベース・プログラムが、ウェブ・ブラウザに結合されていないＩＭ上で実行されているか或いはウェブ・ブラウザに結合されているＩＭ上で実行されているかを判断するためのチェックをして、
前記インタープリタ・ベース・プログラムが、ウェブ・ブラウザに結合されていないＩＭ上で実行されている場合に、前記第１のクラス・メソッドを実行し、この際に前記第１のクラス・メソッドは、前記インタープリタ・ベース・プログラムの実行中にＩ／Ｏ動作を実行し、
前記インタープリタ・ベース・プログラムが、ウェブ・ブラウザに結合されているＩＭ上で実行されている場合に、前記第２のクラス・メソッドを実行し、この際に前記第２のクラス・メソッドは、前記インタープリタ・ベース・プログラムの実行中にＩ／Ｏ動作を実行するところのステップと
を含む方法。
（２）  前記データの長さを前記プログラムから渡すステップが、
ハイパーテキスト転送プロトコル（ＨＴＴＰ）によって必要とされるコンテント長ヘッダ・フィールドにおける前記データの長さを渡すサブステップと、及び
ＨＴＴＰ標準によって定義される前記メッセージにおける前記エンティティ本体の一部としてデータ自身を渡すサブステップと、
を含む、（１）に記載の方法。
（３）  実行のためのインタープリタ・ベース・プログラム用の前記Ｉ／Ｏクラスに基づく第１のクラス・メソッドを有するオブジェクトを生成する前記ステップが、Ｊａｖａ・ベース・プログラムを使用し、実行のためのインタープリタ・ベース・プログラム用の前記Ｉ／Ｏクラスに基づく第１のクラス・メソッドを有するオブジェクトを生成することを含む、（１）に記載の方法。
（４）  前記ウェブ・ブラウザに結合されていないＩＭ上での実行のための前記ステップにおいて、前記インタープリタ・ベース・プログラムがＪａｖａアプリケーションである、（１）に記載の方法。
（５）  ウェブ・ブラウザに結合されているＩＭ上での実行のための前記ステップにおいて、前記インタープリタ・ベース・プログラムがＪａｖａアプレットである、（１）に記載の方法。
（６）  ＩＭ上での実行のためのインタープリタ・ベース・プログラム用の前記Ｉ／Ｏクラスに基づく第１のクラス・メソッドを有するオブジェクトを生成する前記ステップにおいて、Ｊａｖａ仮想マシンを実行する前記ＩＭを含む、（１）に記載の方法。
（７）  前記情報処理装置内にデータを渡し、かつ前記情報処理装置からデータを渡すためのＩ／Ｏクラスを定義するステップをさらに含み、前記データを渡す動作の少なくとも一部がファイル名を使用する、（１）に記載の方法。
（８）  情報処理装置内でＩ／Ｏ（入出力）動作を実行するためのプログラム命令を含むコンピュータ読取可能な記録媒体であって、
プログラムにデータを渡し、かつ前記プログラムからデータを渡すためのＩ／Ｏクラスを定義するステップと、
ウェブ・ブラウザに結合されていないインタープリタ・マシン（ＩＭ）上での実行のためのインタープリタ・ベース・プログラム用の前記Ｉ／Ｏクラスに基づく第１のクラス・メソッドと、及びウェブ・ブラウザに結合されているＩＭ上での実行のための前記Ｉ／Ｏクラスに基づく第２のクラス・メソッドとを有するオブジェクトであって、かつＩ／Ｏ動作を実行するための独自の手続きおよびデータ変数を有するところの前記Ｉ／Ｏクラスのインスタンスであるオブジェクトを作成するステップと、
前記プログラムから未知の長さのデータを渡す要求を受け取るステップと、
前記未知の長さのデータを書き込むために当該情報処理装置内でローカル・バッファを割り振るステップと、
前記ローカル・バッファ内に前記未知の長さのデータを書き込むステップと、
前記ローカル・バッファ内の前記未知の長さのデータの長さを判定するステップと、
前記バッファ内の前記データとともに前記データの長さを前記プログラムから渡すステップと、及び
前記インタープリタ・ベース・プログラムが、ウェブ・ブラウザに結合されていないＩＭ上で実行されているか或いはウェブ・ブラウザに結合されているＩＭ上で実行されているかを判断するためのチェックをして、
前記インタープリタ・ベース・プログラムが、ウェブ・ブラウザに結合されていないＩＭ上で実行されている場合に、前記第１のクラス・メソッドを実行し、この際に前記第１のクラス・メソッドは、前記インタープリタ・ベース・プログラムの実行中にＩ／Ｏ動作を実行し、
前記インタープリタ・ベース・プログラムが、ウェブ・ブラウザに結合されているＩＭ上で実行されている場合に、前記第２のクラス・メソッドを実行し、この際に前記第２のクラス・メソッドは、前記インタープリタ・ベース・プログラムの実行中にＩ／Ｏ動作を実行するところのステップと
を実行するプログラム命令を含むコンピュータ読取可能な記録媒体。
（９）  前記データの長さを前記プログラムから渡すステップが、
ハイパーテキスト転送プロトコル（ＨＴＴＰ）によって必要とされるコンテント長ヘッダ・フィールドにおける前記データの長さを渡すサブステップと、及び
ＨＴＴＰ標準によって定義される前記メッセージにおける前記エンティティ本体の一部としてデータ自身を渡すサブステップと、
を実行するためのプログラム命令をさらに含む（８）に記載のコンピュータ読取可能な記録媒体。
（１０）  実行のためのインタープリタ・ベース・プログラム用の前記Ｉ／Ｏクラスに基づく第１のクラス・メソッドを有するオブジェクトを生成する前記ステップが、Ｊａｖａ・ベース・プログラムを使用し、実行のためのインタープリタ・ベース・プログラム用の前記Ｉ／Ｏクラスに基づく第１のクラス・メソッドを有するオブジェクトを生成することを含むところのプログラム命令を含む（８）に記載のコンピュータ読取可能な記録媒体。
（１１）  前記ウェブ・ブラウザに結合されていないＩＭ上での実行のための前記ステップにおいて、前記インタープリタ・ベース・プログラムがＪａｖａアプリケーションであるところのプログラム命令を含む（８）に記載のコンピュータ読取可能な記録媒体。
（１２）  ウェブ・ブラウザに結合されているＩＭ上での実行のための前記ステップにおいて、前記インタープリタ・ベース・プログラムがＪａｖａアプレットであるところのプログラム命令を含む（８）に記載のコンピュータ読取可能な記録媒体。
（１３）  ＩＭ上での実行のためのインタープリタ・ベース・プログラム用の前記Ｉ／Ｏクラスに基づく第１のクラス・メソッドを有するオブジェクトを生成する前記ステップにおいて、Ｊａｖａ仮想マシンを実行する前記ＩＭを含むところのプログラム命令を含む（８）に記載のコンピュータ読取可能な記録媒体。
（１４）  前記情報処理装置内にデータを渡し、かつ前記情報処理装置からデータを渡すためのＩ／Ｏクラスを定義するステップをさらに含み、前記データを渡す動作の少なくとも一部がファイル名を使用するところのプログラム命令を含む（８）に記載のコンピュータ読取可能な記録媒体。
（１５）  Ｉ／Ｏ（入出力）を実行するための情報処理システムであって、
プログラムにデータを渡し、かつ前記プログラムからデータを渡すためのＩ／Ｏクラスと、
ウェブ・ブラウザに結合されていないインタープリタ・マシン（ＩＭ）上での実行のためのインタープリタ・ベース・プログラム用の前記Ｉ／Ｏクラスに基づく第１のクラス・メソッドと、及びウェブ・ブラウザに結合されているＩＭ上での実行のための前記Ｉ／Ｏクラスに基づく第２のクラス・メソッドとを有するオブジェクトであって、かつＩ／Ｏ動作を実行するための独自の手続きおよびデータ変数を有するところの前記Ｉ／Ｏクラスのインスタンスである前記オブジェクトと、
前記プログラムから未知の長さのデータを渡す要求を受け取るための手段と、
前記未知の長さのデータを書き込むためのローカル・バッファと、
前記ローカル・バッファ内に前記未知の長さのデータを書き込むための手段と、
前記ローカル・バッファ内の前記未知の長さのデータの長さを判定するための手段と、
前記バッファ内の前記データとともに前記データの長さを前記プログラムから渡すための手段と、及び
前記インタープリタ・ベース・プログラムが、ウェブ・ブラウザに結合されていないＩＭ上で実行されているか或いはウェブ・ブラウザに結合されているＩＭ上で実行されているかを判断するためのチェックをして、
前記インタープリタ・ベース・プログラムが、ウェブ・ブラウザに結合されていないＩＭ上で実行されている場合に、前記第１のクラス・メソッドが実行されるようにし、かつ前記インタープリタ・ベース・プログラムが、ウェブ・ブラウザに結合されているＩＭ上で実行されている場合に、前記第２のクラス・メソッドを実行されるようにするために、前記インタープリタ・ベース・プログラムの実行中にＩ／Ｏ動作を実行するための前記第１のクラス・メソッドまたは前記第２のクラス・メソッドのうちの１つを実行するための手段と
を含む、情報処理システム。
（１６）  前記渡すための手段が、
前記データの長さを渡すために、ハイパーテキスト転送プロトコル（ＨＴＴＰ）によって必要とされるコンテント長ヘッダ・フィールドと、及び
前記データ自身を渡すために、ＨＴＴＰ標準によって定義される前記メッセージにおける前記エンティティ本体と、
を含む、（１５）に記載の情報処理システム。
（１７）  前記インタープリタ・ベース・プログラムが、Ｊａｖａ・ベース・プログラムである、（１５）に記載の情報処理システム。
（１８）  前記インタープリタ・ベース・プログラムが、Ｊａｖａ・アプリケーションである、（１５）に記載の情報処理システム。
【図面の簡単な説明】
【図１】本発明が実施される、ウェブ・エージをホストするための通常の情報処理システムの機能ブロック図である。
【図２】本発明に従って使用される情報処理システムの主要な電気的構成要素の機能ブロック図である。
【図３】本発明によるJava実行時環境のブロック図である。
【図４】本発明による出力ストリームのためのJava I/Oツールキット関数の流れ図である。
【符号の説明】
１００  ウェブ・ページ
１０１  ウェブ・サーバ
１０３  アプリケーション
１０５  インターネット
１０７  エンド・ユーザ情報処理装置
１０９  ウェブ・ブラウザ
３００  Java実行時環境
３０１  Javaバイト・コード
３０３  Java実行時環境
３０５  クラス・ローダ
３０７  Javaクラス・ライブラリ
３０９  Java仮想マシン（ＶＭ）
３１１  Javaインタープリタ
３１３  ジャスト・イン・タイム・コンパイラ
３１５  Java実行時システム
３１７  オペレーティング・システム
３１９  ハードウェア・プラットフォーム
【図１】
0003888818.tif 000002
【図２】
0003888818.tif 000003
【図３】
0003888818.tif 000004
【図４】
0003888818.tif 000005